Tworzenie aplikacji typu
Rich Clients za pomocą
Eclipse 4 RCP
Eclipse Day Kraków
    13.09.2012


    Kamil Piętak
 kpietak@agh.edu.pl
Produkty Eclipse RCP 3.x

 IDE
     Java
     C++                                                                          XMind

     PHP on uDig
       Takka

     Scala
     Latex                   MyTourbook

     etc.

                                                                          Knime

                Tworzenie aplikacji Rich Client za pomocą Eclipse 4 RCP     Copyright © 2012 IISG
Agenda
Elementy Eclipse 4.x
 Model aplikacji
 Wstrzykiwanie zależności
 Definicja API za pomocą adnotacji
 Wbudowane (opcjonalne) usługi
 Obsługa stylów CSS



            Tworzenie aplikacji Rich Client za pomocą Eclipse 4 RCP   Copyright © 2012 IISG
Elementy Eclipse 4.x
   Model aplikacji
   Wstrzykiwanie zależności
   Definicja API za pomocą adnotacji
   Wbudowane (opcjonalne) usługi
   Obsługa stylów CSS




              Tworzenie aplikacji Rich Client za pomocą Eclipse 4 RCP   Copyright © 2012 IISG
Zarządzanie strukturą produktu

                        Menus,
                      Commands,
                       Handlers                                                    Outline View
                                                                                    Java Editor


                                                Graph Editor
        Resources Editor                                                                     Help Content
         Toolbar Items
    Resources                            Commands for
 Management View                            Graphs
                                                                 Commands, Handlers
                                                                    for Compiler

                      Application
                      Preferences                                   Table Editor




                           Tworzenie aplikacji Rich Client za pomocą Eclipse 4 RCP       Copyright © 2012 IISG
Zarządzanie strukturą produktu




                                                 Źródło: http://www.barnorama.com/crazy-scaffolding/

         Tworzenie aplikacji Rich Client za pomocą Eclipse 4 RCP       Copyright © 2012 IISG
Model aplikacji (1)




         Tworzenie aplikacji Rich Client za pomocą Eclipse 4 RCP   Copyright © 2012 IISG
Model aplikacji (2)
 Opis modelu w statycznym pliku (domyślnie
  Application.e4xml) w plug-inie produktu
 Możliwośd rozszerzenia modelu za pomocą tzw.
  fragmentów
 Brak rozróżnienia pomiędzy widokami i edytorami
   parts
 Model jest dostępny w czasie działania programu
  (API, live editor)

            Tworzenie aplikacji Rich Client za pomocą Eclipse 4 RCP   Copyright © 2012 IISG
Elementy Eclipse 4.x
   Model aplikacji
   Wstrzykiwanie zależności
   Definicja API za pomocą adnotacji
   Wbudowane (opcjonalne) usługi
   Obsługa stylów CSS




              Tworzenie aplikacji Rich Client za pomocą Eclipse 4 RCP   Copyright © 2012 IISG
Eclipse 3.x – statyczne
zależności
public class SampleCommandOnSelection extends AbstractHandler {

    public Object execute(final ExecutionEvent evnt){

// get get active selection
    // active selection
ISelection selection = HandlerUtil.getActiveWorkbenchWindow(event)
    ISelection selection = HandlerUtil.getCurrentSelection(evnt);
  .getActivePage().getSelection();
    // get active editor
    IWorkbenchPart part = HandlerUtil.getActivePart(evnt);

        return null;
    }
}




                       Tworzenie aplikacji Rich Client za pomocą Eclipse 4 RCP   Copyright © 2012 IISG
Eclipse 4.x - komenda
public class SampleCommandOnSelection {

    @Inject
    ESelectionService selService;

    @Execute
    public void execute() {
      ISelection selection = selService.getSelection();
    }

}




                  Tworzenie aplikacji Rich Client za pomocą Eclipse 4 RCP   Copyright © 2012 IISG
Wstrzykiwanie zależności (1)
 Adnotacje JSR-330
   @Inject
   @Named
 Dodatkowe adnotacje
   @Optional
   @Preference
 Re-injection śledzenie zmian wartości
  wstrzykniętych elementów (np. aktualna selekcja)

              Tworzenie aplikacji Rich Client za pomocą Eclipse 4 RCP   Copyright © 2012 IISG
Wstrzykiwanie zależności (2)
 Co jest dostępne w kontenerach?
     wszystkie serwisy OSGi,
     elementy modelu aplikacji,
     preferencje,
     recznie dodane obiekty.




               Tworzenie aplikacji Rich Client za pomocą Eclipse 4 RCP   Copyright © 2012 IISG
Wstrzykiwanie zależności (3)
 Hierarchia kontenerów (kontekstów)




                                              Źródło: http://www.vogella.com/articles/EclipseRCP/article.html

            Tworzenie aplikacji Rich Client za pomocą Eclipse 4 RCP           Copyright © 2012 IISG
Elementy Eclipse 4.x
   Model aplikacji
   Wstrzykiwanie zależności
   Definicja API za pomocą adnotacji
   Wbudowane (opcjonalne) usługi
   Obsługa stylów CSS




              Tworzenie aplikacji Rich Client za pomocą Eclipse 4 RCP   Copyright © 2012 IISG
Eclipse 3.x – definicja widoku
public class SampleView extends ViewPart {

    Label label;

    public void createPartControl(Composite parent) {
         label = new Label(parent, SWT.NONE);
    }

    public voidd setFocus() {
      label.setFocus();
    }

    public void dispose() {...}
}




                   Tworzenie aplikacji Rich Client za pomocą Eclipse 4 RCP   Copyright © 2012 IISG
Eclipse 4.x – definicja widoku
public class SampleView {

    Label label;

    @PostConstruct
    public void createContents(Composite parent) {
         label = new Label(parent, SWT.NONE);
    }

    @Focus
    private void setFocus() {
      label.setFocus();
    }

    @PreDestroy
    public void dispose() {...}
}

                   Tworzenie aplikacji Rich Client za pomocą Eclipse 4 RCP   Copyright © 2012 IISG
Definicja API za pomocą
adnotacji
 Zarządzanie cyklem życia partów
   @PostConstruct
   @PreDestroy
   @Focus
 Zarządzanie cyklem życia aplikacji
 Beheviours annotations
   @Execute
   @CanExecute
   @EventTopic and @UIEventTopic

                                                            Źródło: http://www.toedter.com/blog/?p=896

             Tworzenie aplikacji Rich Client za pomocą Eclipse 4 RCP     Copyright © 2012 IISG
Elementy Eclipse 4.x
   Model aplikacji
   Wstrzykiwanie zależności
   Definicja API za pomocą adnotacji
   Wbudowane (opcjonalne) usługi
   Obsługa stylów CSS




              Tworzenie aplikacji Rich Client za pomocą Eclipse 4 RCP   Copyright © 2012 IISG
Wbudowane usługi
 Większośd usług jest opcjonalna
 Rejestrowanie usług za pomocą:
   OSGi Services
   Addons w modelu aplikacji
   Ręczne – bezpośrednio w kontenerze
 Przykładowe usługi:
     IEventBroker
     EModelSerivce, EPartService
     DnDAddon
     StatusReporter, Logging

               Tworzenie aplikacji Rich Client za pomocą Eclipse 4 RCP   Copyright © 2012 IISG
Elementy Eclipse 4.x
   Model aplikacji
   Wstrzykiwanie zależności
   Definicja API za pomocą adnotacji
   Wbudowane (opcjonalne) usługi
   Obsługa stylów CSS




              Tworzenie aplikacji Rich Client za pomocą Eclipse 4 RCP   Copyright © 2012 IISG
Style CSS i renderery


                                                   Swing
                                                   Java FX




                                                        Źródło: http://www.toedter.com/blog/?p=709

         Tworzenie aplikacji Rich Client za pomocą Eclipse 4 RCP     Copyright © 2012 IISG
Style CSS
 CSS Spy – narzędzie umożliwiające podgląd
  właściwości wizualnych dla elementów aplikacji
 Theme Manager – umożliwia zmianę stylu w czasie
  działania programu
 Ciekawy styl dla Eclipse IDE:
   http://www.vogella.com/blog/2012/07/25/new-eclipse-
    4-chrome-theme-eclipse-4-get-even-more-beautiful/



                                             Źródło: http://www.vogella.com/articles/Eclipse4CSS/article.html

            Tworzenie aplikacji Rich Client za pomocą Eclipse 4 RCP           Copyright © 2012 IISG
Znane problemy
 Trudności z wykorzystaniem elementów z Eclipse 3.x
  (np. widoki, edytory) w aplikacjach zbudowanych na
  Eclipse 4.x
 Problemy z wydajnością:
   http://www.h-online.com/open/news/item/Weak-
    performance-of-Eclipse-4-2-criticised-1702921.html
   https://bugs.eclipse.org/bugs/show_bug.cgi?id=385272
   Dodatkowe fundusze na optymalizację środowiska


            Tworzenie aplikacji Rich Client za pomocą Eclipse 4 RCP   Copyright © 2012 IISG
Podsumowanie
 Obiecujące narzędzie do tworzenia całkiem nowych
  aplikacji typu rich client
   Łatwe zarządzanie strukturą aplikacji
   Szybszy i łatwiejszy development
   Poprawione możliwości testowania kodu
 Problemy z migracją istniejących rozwiązao
 Poza stylami CSS brak znaczących usprawnieo i
  nowości w tworzeniu interfejsu graficznego


            Tworzenie aplikacji Rich Client za pomocą Eclipse 4 RCP   Copyright © 2012 IISG
Źródła i ciekawe odnośniki
 Tutoriale o Eclipse 4, Lars Vogel
  http://www.vogella.com/
 Eclipse 4 Application Development, Lars Vogel, Mike
  Milinkovich (Foreword)
 Kai Tödter Blog:
  http://www.toedter.com/blog/




            Tworzenie aplikacji Rich Client za pomocą Eclipse 4 RCP   Copyright © 2012 IISG
Pytania?




 Kamil Piętak (kpietak@agh.edu.pl)
                                                                      Źródło: http://sixtorivera.com

            Tworzenie aplikacji Rich Client za pomocą Eclipse 4 RCP   Copyright © 2012 IISG

Tworzenie aplikacji typu Rich Clients za pomocą Eclipse 4 RCP

  • 1.
    Tworzenie aplikacji typu RichClients za pomocą Eclipse 4 RCP Eclipse Day Kraków 13.09.2012 Kamil Piętak kpietak@agh.edu.pl
  • 2.
    Produkty Eclipse RCP3.x  IDE  Java  C++ XMind  PHP on uDig Takka  Scala  Latex MyTourbook  etc. Knime Tworzenie aplikacji Rich Client za pomocą Eclipse 4 RCP Copyright © 2012 IISG
  • 3.
    Agenda Elementy Eclipse 4.x Model aplikacji  Wstrzykiwanie zależności  Definicja API za pomocą adnotacji  Wbudowane (opcjonalne) usługi  Obsługa stylów CSS Tworzenie aplikacji Rich Client za pomocą Eclipse 4 RCP Copyright © 2012 IISG
  • 4.
    Elementy Eclipse 4.x  Model aplikacji  Wstrzykiwanie zależności  Definicja API za pomocą adnotacji  Wbudowane (opcjonalne) usługi  Obsługa stylów CSS Tworzenie aplikacji Rich Client za pomocą Eclipse 4 RCP Copyright © 2012 IISG
  • 5.
    Zarządzanie strukturą produktu Menus, Commands, Handlers Outline View Java Editor Graph Editor Resources Editor Help Content Toolbar Items Resources Commands for Management View Graphs Commands, Handlers for Compiler Application Preferences Table Editor Tworzenie aplikacji Rich Client za pomocą Eclipse 4 RCP Copyright © 2012 IISG
  • 6.
    Zarządzanie strukturą produktu Źródło: http://www.barnorama.com/crazy-scaffolding/ Tworzenie aplikacji Rich Client za pomocą Eclipse 4 RCP Copyright © 2012 IISG
  • 7.
    Model aplikacji (1) Tworzenie aplikacji Rich Client za pomocą Eclipse 4 RCP Copyright © 2012 IISG
  • 8.
    Model aplikacji (2) Opis modelu w statycznym pliku (domyślnie Application.e4xml) w plug-inie produktu  Możliwośd rozszerzenia modelu za pomocą tzw. fragmentów  Brak rozróżnienia pomiędzy widokami i edytorami  parts  Model jest dostępny w czasie działania programu (API, live editor) Tworzenie aplikacji Rich Client za pomocą Eclipse 4 RCP Copyright © 2012 IISG
  • 9.
    Elementy Eclipse 4.x  Model aplikacji  Wstrzykiwanie zależności  Definicja API za pomocą adnotacji  Wbudowane (opcjonalne) usługi  Obsługa stylów CSS Tworzenie aplikacji Rich Client za pomocą Eclipse 4 RCP Copyright © 2012 IISG
  • 10.
    Eclipse 3.x –statyczne zależności public class SampleCommandOnSelection extends AbstractHandler { public Object execute(final ExecutionEvent evnt){ // get get active selection // active selection ISelection selection = HandlerUtil.getActiveWorkbenchWindow(event) ISelection selection = HandlerUtil.getCurrentSelection(evnt); .getActivePage().getSelection(); // get active editor IWorkbenchPart part = HandlerUtil.getActivePart(evnt); return null; } } Tworzenie aplikacji Rich Client za pomocą Eclipse 4 RCP Copyright © 2012 IISG
  • 11.
    Eclipse 4.x -komenda public class SampleCommandOnSelection { @Inject ESelectionService selService; @Execute public void execute() { ISelection selection = selService.getSelection(); } } Tworzenie aplikacji Rich Client za pomocą Eclipse 4 RCP Copyright © 2012 IISG
  • 12.
    Wstrzykiwanie zależności (1) Adnotacje JSR-330  @Inject  @Named  Dodatkowe adnotacje  @Optional  @Preference  Re-injection śledzenie zmian wartości wstrzykniętych elementów (np. aktualna selekcja) Tworzenie aplikacji Rich Client za pomocą Eclipse 4 RCP Copyright © 2012 IISG
  • 13.
    Wstrzykiwanie zależności (2) Co jest dostępne w kontenerach?  wszystkie serwisy OSGi,  elementy modelu aplikacji,  preferencje,  recznie dodane obiekty. Tworzenie aplikacji Rich Client za pomocą Eclipse 4 RCP Copyright © 2012 IISG
  • 14.
    Wstrzykiwanie zależności (3) Hierarchia kontenerów (kontekstów) Źródło: http://www.vogella.com/articles/EclipseRCP/article.html Tworzenie aplikacji Rich Client za pomocą Eclipse 4 RCP Copyright © 2012 IISG
  • 15.
    Elementy Eclipse 4.x  Model aplikacji  Wstrzykiwanie zależności  Definicja API za pomocą adnotacji  Wbudowane (opcjonalne) usługi  Obsługa stylów CSS Tworzenie aplikacji Rich Client za pomocą Eclipse 4 RCP Copyright © 2012 IISG
  • 16.
    Eclipse 3.x –definicja widoku public class SampleView extends ViewPart { Label label; public void createPartControl(Composite parent) { label = new Label(parent, SWT.NONE); } public voidd setFocus() { label.setFocus(); } public void dispose() {...} } Tworzenie aplikacji Rich Client za pomocą Eclipse 4 RCP Copyright © 2012 IISG
  • 17.
    Eclipse 4.x –definicja widoku public class SampleView { Label label; @PostConstruct public void createContents(Composite parent) { label = new Label(parent, SWT.NONE); } @Focus private void setFocus() { label.setFocus(); } @PreDestroy public void dispose() {...} } Tworzenie aplikacji Rich Client za pomocą Eclipse 4 RCP Copyright © 2012 IISG
  • 18.
    Definicja API zapomocą adnotacji  Zarządzanie cyklem życia partów  @PostConstruct  @PreDestroy  @Focus  Zarządzanie cyklem życia aplikacji  Beheviours annotations  @Execute  @CanExecute  @EventTopic and @UIEventTopic Źródło: http://www.toedter.com/blog/?p=896 Tworzenie aplikacji Rich Client za pomocą Eclipse 4 RCP Copyright © 2012 IISG
  • 19.
    Elementy Eclipse 4.x  Model aplikacji  Wstrzykiwanie zależności  Definicja API za pomocą adnotacji  Wbudowane (opcjonalne) usługi  Obsługa stylów CSS Tworzenie aplikacji Rich Client za pomocą Eclipse 4 RCP Copyright © 2012 IISG
  • 20.
    Wbudowane usługi  Większośdusług jest opcjonalna  Rejestrowanie usług za pomocą:  OSGi Services  Addons w modelu aplikacji  Ręczne – bezpośrednio w kontenerze  Przykładowe usługi:  IEventBroker  EModelSerivce, EPartService  DnDAddon  StatusReporter, Logging Tworzenie aplikacji Rich Client za pomocą Eclipse 4 RCP Copyright © 2012 IISG
  • 21.
    Elementy Eclipse 4.x  Model aplikacji  Wstrzykiwanie zależności  Definicja API za pomocą adnotacji  Wbudowane (opcjonalne) usługi  Obsługa stylów CSS Tworzenie aplikacji Rich Client za pomocą Eclipse 4 RCP Copyright © 2012 IISG
  • 22.
    Style CSS irenderery Swing Java FX Źródło: http://www.toedter.com/blog/?p=709 Tworzenie aplikacji Rich Client za pomocą Eclipse 4 RCP Copyright © 2012 IISG
  • 23.
    Style CSS  CSSSpy – narzędzie umożliwiające podgląd właściwości wizualnych dla elementów aplikacji  Theme Manager – umożliwia zmianę stylu w czasie działania programu  Ciekawy styl dla Eclipse IDE:  http://www.vogella.com/blog/2012/07/25/new-eclipse- 4-chrome-theme-eclipse-4-get-even-more-beautiful/ Źródło: http://www.vogella.com/articles/Eclipse4CSS/article.html Tworzenie aplikacji Rich Client za pomocą Eclipse 4 RCP Copyright © 2012 IISG
  • 24.
    Znane problemy  Trudnościz wykorzystaniem elementów z Eclipse 3.x (np. widoki, edytory) w aplikacjach zbudowanych na Eclipse 4.x  Problemy z wydajnością:  http://www.h-online.com/open/news/item/Weak- performance-of-Eclipse-4-2-criticised-1702921.html  https://bugs.eclipse.org/bugs/show_bug.cgi?id=385272  Dodatkowe fundusze na optymalizację środowiska Tworzenie aplikacji Rich Client za pomocą Eclipse 4 RCP Copyright © 2012 IISG
  • 25.
    Podsumowanie  Obiecujące narzędziedo tworzenia całkiem nowych aplikacji typu rich client  Łatwe zarządzanie strukturą aplikacji  Szybszy i łatwiejszy development  Poprawione możliwości testowania kodu  Problemy z migracją istniejących rozwiązao  Poza stylami CSS brak znaczących usprawnieo i nowości w tworzeniu interfejsu graficznego Tworzenie aplikacji Rich Client za pomocą Eclipse 4 RCP Copyright © 2012 IISG
  • 26.
    Źródła i ciekaweodnośniki  Tutoriale o Eclipse 4, Lars Vogel http://www.vogella.com/  Eclipse 4 Application Development, Lars Vogel, Mike Milinkovich (Foreword)  Kai Tödter Blog: http://www.toedter.com/blog/ Tworzenie aplikacji Rich Client za pomocą Eclipse 4 RCP Copyright © 2012 IISG
  • 27.
    Pytania?  Kamil Piętak(kpietak@agh.edu.pl) Źródło: http://sixtorivera.com Tworzenie aplikacji Rich Client za pomocą Eclipse 4 RCP Copyright © 2012 IISG

Editor's Notes

  • #3 Dopisać IDE dla różnych językówPHPC++Ruby, etc.Latex
  • #11 Centralny punkt aplikacji – zawiera opis struktury produktu, elementów wizualnych oraz innych elementów takich jak komendy, skróty klawiszowe, usługi.Ułatwia zarządzanie i wdrożenie, ponieważ pozwala na szybki podgląd struktury aplikacji...
  • #14 Problemy: - testy tylko z uruchomionym workbenchem – trudności w pisaniu testów jednostkowych - wiele sposobów na pobieranie tych samych elementów
  • #15 Dwa przykłady: - wstrzykniecie ESelectionService + getSelection - wstrzynkięcie od razu aktywnej selekcji z wykorzystaniem @Named
  • #18 Opisać co nam daje: - różne implementacje tych samych interfejsów na różnych poziomach - zarządzanie widocznością i dostępem do poszczególnych elementów, np. Wybór najbardziej specyficznego handler’a
  • #20 Z loggerem i przykładowym serwisemConstruct, etc.
  • #26 Przykłady różnych widoków tej samej aplikacji
  • #28 Code coverage:- Coberturadependencies and before run-timeinstrumentation problem- EclEmma (Eclipse 3.2 the Equinox OSGi implementation offers so called adaptor hooks)- JaCoCo = evolution of EclEmma