itemis APPlause Vortrag im Rahmen der Vorlesung Modellgetriebene Softwareentwicklung/Architekturen Dozenten: Prof. Dr. Martin Buchheit & Bernhard Merkle WS 2011/2012 Referent: Florian Kalisch, Denis Radjenovic Einführung itemis APPlause ◦ Funktionsweise / Ergebnisse Analyse der Domänenarchitektur ◦ Domäne / Mapping Konzepte / Generierungsprozess / APPlause Projekt Wizard Eigenes Beispiel mit APPlause Fazit & Ausblick MDSD | WS 11/12 | 26.01.2012 2 von 24 Entwicklung mobiler Anwendungen heute: ◦ EINE Idee für eine mobile Anwendung (App) ◦ VIELE Plattformen auf dem Markt (z.B. iOS, Android, Windows Phone 7, Blackberry usw.) ◦ Frage: Für welche Plattform entscheide ich mich? ◦ Antwort: Am Besten für so viele Plattformen wie möglich! MDSD | WS 11/12 | 26.01.2012 3 von 24 Probleme bei der Entwicklung für verschiedene Plattformen: ◦ unterschiedliche Entwicklungsplattformen Mac OS X oder Windows ◦ unterschiedliche Entwicklungsumgebungen Eclipse, Xcode, Visual Studio ◦ unterschiedliche Programmiersprachen C#, Objective-C, Java usw. Lösung: ◦ MDSD -> zumindest für den Programm-Code MDSD | WS 11/12 | 26.01.2012 4 von 24 Opensource Projekt von itemis Projekt-Website: ◦ https://github.com/applause/applause APPlause ist ein vorkonfiguriertes Xtext Projekt und kein Plug-In oder eigenständige Anwendung basiert auf Eclipse v3.6 und Xtext v1.0.2 Installation erfolgt durch einen simplen Import in den Eclipse-Workspace MDSD | WS 11/12 | 26.01.2012 5 von 24 Unterstützte Plattformen: Google App Engine ◦ Python v2.6 Apple iOS ◦ Xcode v3.1 Android ◦ Eclipse API v2.1 Windows Phone 7 ◦ VisualStudio 2010, API v7.5 MDSD | WS 11/12 | 26.01.2012 6 von 24 Starten einer eigenen Eclipse-Instanz für den Modelleditor File->New->Other = select Project Wizard MDSD | WS 11/12 | 26.01.2012 7 von 24 APPlause Project Wizard MDSD | WS 11/12 | 26.01.2012 8 von 24 Google App Engine: ◦ http://hs-furtwagen-mytest.appspot.com/ iOS ◦ Xcode 4.2.1 = geht, benötigt manuelle Anpassung ◦ Xcode 3.2.6 Android ◦ API v4.0, geht nicht ◦ API v2.1 Windows Phone ◦ lässt sich mit VS2010 kompilieren aber nicht unter einer VM anzeigen ◦ hat noch viel manuelle Anpassung benötigt MDSD | WS 11/12 | 26.01.2012 9 von 24 Beschreibung der Domäne ◦ Adressiert werden sogenannte Datengetriebene Anwendungen Auslesen von Daten Navigation durch diese ◦ Manipulation aktuell nicht unterstützt ◦ als Datenquellen dienen Daten im XML-Format MDSD | WS 11/12 | 26.01.2012 10 von 24 Elemente der Domäne MDSD | WS 11/12 | 26.01.2012 11 von 24 Mapping Konzepte Entity Data Provider Tab bar tabbarApplication APPlauseSample { button { title="Applause" icon="trophy.png" view= CommitList( allCommitsByRepository("applause/applause") ) } button { title= "Peter" icon= "person.png" view= UserDetails( userData("peterfriese")) } Tab bar button Table view View title button { title= "Heiko" icon= "person.png" view= UserDetails(userData("hbehrens")) } Table cell } MDSD | WS 11/12 | 26.01.2012 12 von 24 Mapping Konzepte type String mapsTo "String" entity Commit { Entity Data Provider Tab bar String id String url String message User committer } entity User { String String String String String String String Tab bar button Table view View title name login language location repos followers company } entity Repository { String String String String Table cell description watchers name owner } MDSD | WS 11/12 | 26.01.2012 13 von 24 Mapping Konzepte Entity Data Provider Tab bar Tab bar button Table view View title Table cell contentprovider allCommitsByRepository(String path) returns Commit[] fetches XML from ( "http://github.com/api/v2/xml/commits/list/" path "/master“ ) selects "commits.commit" contentprovider userData(String login) returns User fetches XML from ("http://github.com/api/v2/xml/user/search/" login) selects "users.user" contentprovider allRepositoriesByUser(String login) returns Repository[] fetches XML from ("http://github.com/api/v2/xml/repos/show/" login) selects "repositories.repository" MDSD | WS 11/12 | 26.01.2012 14 von 24 Mapping Konzepte Entity Data Provider Tab bar tableview CommitList(Commit[] commits) { title= "Commits" section { Tab bar button cell Subtitle foreach commits as c { text= c.committer.name details= c.message action= UserDetails( userData(c.committer.login) ) } Table view View title Table cell } } MDSD | WS 11/12 | 26.01.2012 15 von 24 User Interface initiiert Generierung mit Hilfe der plattformspezifischen Generatoren Problem: ◦ User Interface muss wissen welche Generatoren zur Verfügung stehen Lösung: ◦ User Interface und Generatoren sind als Plug-Ins implementiert MDSD | WS 11/12 | 26.01.2012 16 von 24 User Interface bietet Extension Points buildstrategy und mobileplattform Generatoren registrieren sich mit eigenen Extensions buildstrategy und mobileplatform an den Extension Points des User Interface MDSD | WS 11/12 | 26.01.2012 17 von 24 Generator „Android“ plugin.xml „Android“ <?xml version="1.0" encoding="UTF-8"?> <?eclipse version="3.4"?> <plugin> <extension point="org.applause.lang.ui.buildstrategy"> <buildstrategy class="org.applause.lang.generator.android. builder.AndroidBuildStrategy"> </buildstrategy> </extension> <extension point="org.applause.lang.ui.mobileplatform"> <mobileplatform name="Android" projectNameSuffix="Android" templateProject="templateproject/project.zip"> </mobileplatform> </extension> </plugin> MDSD | WS 11/12 | 26.01.2012 18 von 24 erzeugt gewünschte plattformspezifische Projekte inklusive Beispielmodell nutzt die Wizard-Funktionalität von Xtext ist unterteilt in zwei Bereiche: ◦ Benutzeroberfläche CustomApplauseDslNewProjectWizard.java GeneratorFragmentSelectionWizardPage.java ◦ Projektgenerator CustomApplauseProjectCreator.java MDSD | WS 11/12 | 26.01.2012 19 von 24 CustomApplauseDslNewProjectWizard.java GeneratorFragmentSelectionWizardPage.java Android Mobile Web iPhone Windows Phone 7 MDSD | WS 11/12 | 26.01.2012 20 von 24 Android Mobile Web iPhone Windows Phone 7 CustomApplauseProjectCreator execute() MDSD | WS 11/12 | 26.01.2012 21 von 24 MDSD | WS 11/12 | 26.01.2012 22 von 24 Pro ◦ APPlause ist im Rahmen der Domäne produktiv einsetzbar ◦ die Generatoren sind gut strukturiert ◦ der APPlause Projekt Wizard erspart viel Arbeit ◦ APPlause kann als Referenzprojekt für eigene Entwicklung mit Xtext verwendet werden Con ◦ fehlende Dokumentation ◦ abweichende Benutzeroberflächen in den generierten Anwendungen MDSD | WS 11/12 | 26.01.2012 23 von 24 Fragen? Anregungen? MDSD | WS 11/12 | 26.01.2012 24 von 24