Jacek Pospychała Pospychała Eclipse Summer School 2007Eclipse Summer School 2007 Zastosowania EMF
Jacek Pospychała Pospychała Eclipse Summer School 2007Eclipse Summer School 2007 Podsumowanie EMF 1: EMF jako zaawansowany model danych, oraz innowacyjne środowisko Model Driven Development z wieloma rozszerzeniami. Cel prezentacji EMF 2: Jak dla modelu EMF zbudować funkcjonalne GUI, dokonywać walidacji danych, zarządzać modyfikacjami i operować w srodowisku wielowątkowym.
Jacek Pospychała Pospychała Eclipse Summer School 2007Eclipse Summer School 2007 Zastosowania EMF Utworzenie przykładowej aplikacji Wybrane aspekty działania GUI Integracja z interfejsami użytkownika Grupowanie i cofanie zmian Walidacja Przykłady innych edytorów
Jacek Pospychała Pospychała Eclipse Summer School 2007Eclipse Summer School 2007 Przykładowa aplikacja
Jacek Pospychała Pospychała Eclipse Summer School 2007Eclipse Summer School 2007 Przykładowa aplikacja - model
Jacek Pospychała Pospychała Eclipse Summer School 2007Eclipse Summer School 2007 Aplikacja EBayManager Tworzymy nowy Empty EMF Project projekt org.ess.ebaymanager Tworzymy nowy EMF Model Nazwa: model.genmodel Lokalizacja:org.ess.ebaymanager/model
Jacek Pospychała Pospychała Eclipse Summer School 2007Eclipse Summer School 2007 Aplikacja EBayManager Model Importer: Ecore model URI modelu: Pamiętaj nacisnąć Load! Finish
Jacek Pospychała Pospychała Eclipse Summer School 2007Eclipse Summer School 2007 Aplikacja EBayManager Otwieramy model.genmodel W Properties elementu Model, zmieniamy Rich Client Application = true Generate All z menu kontekstowego Model
Jacek Pospychała Pospychała Eclipse Summer School 2007Eclipse Summer School 2007 Aplikacja EBayManager org.ess.ebaymanager.edit org.ess.ebaymanager.editor Co to jest??
Jacek Pospychała Pospychała Eclipse Summer School 2007Eclipse Summer School 2007 Wybrane aspekty GUI Jak budujemy GUI? miejsce na dane – model (EMF) design, widok, kontrolki, layouty (.Editor) integracja widok-model (.Edit)
Jacek Pospychała Pospychała Eclipse Summer School 2007Eclipse Summer School 2007 EMF.Edit Dostosowanie modelu do potrzeb GUI pełna integracja z modelem adaptery – odbiór i propagacja zmian zasilanie danymi innych interfejsów
Jacek Pospychała Pospychała Eclipse Summer School 2007Eclipse Summer School 2007 EMF.Edit ItemProvider.java ItemProviderAdapterFactory.java EditPlugin.java ItemProviderAdapterFactory agreguje klasy ItemProvider ItemProviderAdapterFactory adaptuje się do otrzymywanych obiektów
Jacek Pospychała Pospychała Eclipse Summer School 2007Eclipse Summer School 2007 Item Provider Adaptery wspierające wyswietlanie i edycję modelu Item Provider Adapter Factory Dostarczanie item providerów Template Method Definiowanie własnego zachowania poprzez modyfikację wygenerowanych item providerów Wzorce
Jacek Pospychała Pospychała Eclipse Summer School 2007Eclipse Summer School 2007 EMF.Edit ItemProviderAdapter Adapter EMF, Implementacja typowych funkcji IEditingDomainProvider Struktura modelu, tworzenie komend IStructuredItemContentProvider Lista elementów obiektu ITreeItemContentProvider Struktura drzewiasta obiektu IItemLabelProvider Nazwa i obrazek obiektu IItemPropertySource Własciwosci obiektu Co dokładnie dostarczają Item Providery ?
Jacek Pospychała Pospychała Eclipse Summer School 2007Eclipse Summer School 2007 Ćwiczenia 1Usunięcie elementów z drzewa
Jacek Pospychała Pospychała Eclipse Summer School 2007Eclipse Summer School 2007 Ćwiczenia 1Usunięcie elementów z drzewa contentOutlineViewer.setInput(editingDomain.getResourceSet()); // REPLACE WITH: contentOutlineViewer.setInput(editingDomain.getResourceSet().getResources().get(0)); public Collection getChildrenFeatures(Object object) { if (childrenFeatures == null) { super.getChildrenFeatures(object); childrenFeatures.add(ModelPackage.Literals.QUERY__ITEMS); // REMOVE childrenFeatures.add(ModelPackage.Literals.QUERY__LOCATION_FILTER); } return childrenFeatures; }
Jacek Pospychała Pospychała Eclipse Summer School 2007Eclipse Summer School 2007 Ćwiczenia 2 Dodanie wirtualnego elementu
Jacek Pospychała Pospychała Eclipse Summer School 2007Eclipse Summer School 2007 Ćwiczenia 2 Dodanie wirtualnego elementu Potrzebny ItemProvider wirtualnego elementu Rejestracja wirtualnego elementu public class VirtualItemProvider extends ItemProviderAdapter implements IEditingDomainItemProvider, IStructuredItemContentProvider, ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource { //... public VirtualItemProvider(AdapterFactory adapterFactory, Queries parent) { super(adapterFactory); this.parent = parent; } //... public String getText(Object object) { return "Number of queries: " + parent.getQueries().size(); }
Jacek Pospychała Pospychała Eclipse Summer School 2007Eclipse Summer School Dodanie wirtualnego elementu Potrzebny ItemProvider wirtualnego elementu Rejestracja wirtualnego elementu Ćwiczenia public class QueriesItemProvider extends ItemProviderAdapter public Collection getChildren(Object object) { Collection result = super.getChildren(object); result.add(new VirtualItemProvider(adapterFactory, (Queries) object)); return result; }
Jacek Pospychała Pospychała Eclipse Summer School 2007Eclipse Summer School 2007.Editor Przykładowy edytor Dynamiczna obsługa dowolnych modeli Wykorzystanie refleksji Wykorzystanie.Edit
Jacek Pospychała Pospychała Eclipse Summer School 2007Eclipse Summer School 2007.Editor Dynamiczna obsługa dowolnych modeli
Jacek Pospychała Pospychała Eclipse Summer School 2007Eclipse Summer School 2007.Editor Dynamiczna obsługa dowolnych modeli Korzystamy z Sample Reflective Ecore Editor
Jacek Pospychała Pospychała Eclipse Summer School 2007Eclipse Summer School 2007.Editor Dynamiczna obsługa dowolnych modeli Korzystamy z Sample Reflective Ecore Editor
Jacek Pospychała Pospychała Eclipse Summer School 2007Eclipse Summer School 2007 Ćwiczenie Dynamiczna obsługa dowolnych modeli Utworzyć dynamiczną instancję Queries Zmodyfikować model, np. dodać nowy LocationFilter Uzupełnić dane w dynamicznej instancji
Jacek Pospychała Pospychała Eclipse Summer School 2007Eclipse Summer School 2007.Editor Wykorzystanie.Edit public class ModelEditor { //... protected void initializeEditingDomain() { //... adapterFactory.addAdapterFactory(new ResourceItemProviderAdapterFactory()); adapterFactory.addAdapterFactory(new ModelItemProviderAdapterFactory()); adapterFactory.addAdapterFactory(new ReflectiveItemProviderAdapterFactory()); //... public void createPages() { //... selectionViewer = (TreeViewer)viewerPane.getViewer(); selectionViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory)); selectionViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
Jacek Pospychała Pospychała Eclipse Summer School 2007Eclipse Summer School 2007.Editor Przykładowe widoki Intensywne wykorzystanie Viewerów Integracja z Outline i Properties Viewery, viewery, viewery ISaveablePart Domena edycyjna Komendy EMF
Jacek Pospychała Pospychała Eclipse Summer School 2007Eclipse Summer School 2007.Editor Przykładowe widoki Intensywne wykorzystanie Viewerów Integracja z Outline i Properties Viewery, viewery, viewery ISaveablePart Domena edycyjna Komendy EMF
Jacek Pospychała Pospychała Eclipse Summer School 2007Eclipse Summer School 2007.Editor Przykładowe widoki Intensywne wykorzystanie Viewerów Integracja z Outline i Properties Viewery, viewery, viewery ISaveablePart Domena edycyjna Komendy EMF
Jacek Pospychała Pospychała Eclipse Summer School 2007Eclipse Summer School 2007.Editor Przykładowe widoki Intensywne wykorzystanie Viewerów Integracja z Outline i Properties Viewery, viewery, viewery ISaveablePart public interface ISaveablePart { public static final int PROP_DIRTY = IWorkbenchPartConstants.PROP_DIRTY; public void doSave(IProgressMonitor monitor); public void doSaveAs(); public boolean isDirty(); public boolean isSaveAsAllowed(); public boolean isSaveOnCloseNeeded(); }
Jacek Pospychała Pospychała Eclipse Summer School 2007Eclipse Summer School 2007.Editor Przykładowe widoki Intensywne wykorzystanie Viewerów Integracja z Outline i Properties Viewery, viewery, viewery ISaveablePart Domena edycyjna Komendy EMF
Jacek Pospychała Pospychała Eclipse Summer School 2007Eclipse Summer School 2007 Komendy Abstrakcyjne - niezależne od modelu Podstawowe operacje na modelu EMF Cofanie/powtarzanie zmian Grupowanie złożonych zmian w jedną operację Transaction: RecordingCommand Transakcje
Jacek Pospychała Pospychała Eclipse Summer School 2007Eclipse Summer School 2007 Zadanie Zmiana sposobu działania komendy: Podczas dodawania nowego obiektu do klasy Queries, wyswietl komunikat.
Jacek Pospychała Pospychała Eclipse Summer School 2007Eclipse Summer School 2007 Zadanie Zmiana sposobu działania komendy: Podczas dodawania nowego obiektu do klasy Queries, wyswietl komunikat. public class QueriesItemProvider extends ItemProviderAdapter... { protected Command createAddCommand(EditingDomain domain, EObject owner, EStructuralFeature feature, Collection collection, int index) { return new AddCommand(domain, owner, feature, collection, index) public void doExecute() { super.doExecute(); // wyswietlenie komunikatu } }; }
Jacek Pospychała Pospychała Eclipse Summer School 2007Eclipse Summer School 2007 Zadanie Zmiana sposobu działania komendy: Podczas dodawania nowego obiektu do klasy Queries, wyswietl komunikat. public class QueriesItemProvider extends ItemProviderAdapter... { protected Command createAddCommand(EditingDomain domain, EObject owner, EStructuralFeature feature, Collection collection, int index) { return new AddCommand(domain, owner, feature, collection, index) public void doExecute() { super.doExecute(); Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(); String message = "Dodano "+collection.size()+ " obiektow do "+feature.getName() + " "+owner.eClass().getName(); MessageDialog.openInformation(shell, "Dodano obiekt", message); } }; }
Jacek Pospychała Pospychała Eclipse Summer School 2007Eclipse Summer School 2007 Walidacja Batch Validation Live Validation
Jacek Pospychała Pospychała Eclipse Summer School 2007Eclipse Summer School 2007 Walidacja: Ćwiczenia Tworzymy ograniczenia (klasy Java) Rejestrujemy ograniczenia (punkty rozszerzeń) Uruchomienie walidacji wsadowej Uruchomienie walidacji dynamicznej
Jacek Pospychała Pospychała Eclipse Summer School 2007Eclipse Summer School 2007 Przykładowy edytor 2 Edytor Eclipse Forms + Databinding Przykład integracji EMF+Eclipse Forms+JFace Databinding
Jacek Pospychała Pospychała Eclipse Summer School 2007Eclipse Summer School 2007 Więcej o EMF
Jacek Pospychała Pospychała Eclipse Summer School 2007Eclipse Summer School 2007 Dziękuję