Hoofdstuk indeling

Doel en uitgangspunten
Waarom:

  • onderhoudbaarheid bestaande code
  • met de tijd mee gaan
  • concurrentie doet het ook
  • verbeteren UI

Framework = delfttools is een verzameling interfaces en voor een aantal generieke interfaces een implementatie

Delftshell implementeert een deel van de interface om een client GUI te bieden aan de gebruiker
Plugins implementeren delen van de interfaces en kunnen als zodanig worden geladen en worden aangeboden aan de gebruiker.

Systeemconcept
Framework

Bij het ontwerp van de nieuwe User Interface moet rekening gehouden worden met meerdere toekomstscenario's. Een user interface kan bijvoorbeeld ontwikkeld worden als een rich client windows applicatie, een web applicatie, een console applicatie of een plugin binnen ArcGIS. Al deze denkbare implementaties zullen gebruik maken van dezelfde concepten/definities. Het objectmodel dat deze definities omvat heet het framework dat als basis voor de verdere ontwikkeling zal dienen.

In de eerste plaats bestaat het framework uit een set generieke interfaces. Deze interfaces zullen moeten worden geimplementeerd binnen de te ontwikkelen User Interface(s). Naast de interfaces die door de gebruikers van het framework geïmplementeerd moeten worden biedt het framework ook al een aantal standaard implementaties.

De belangrijkste interfaces binnen het framework zijn

Project
Task
Model
DataItem
Plugin
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

Implementatie UI
Binnen dit project workt het concept van het framework gebruikt om een rich client windows applicatie te bouwen. Deze richclient applicatie bestaat uit een aantal verschillende componenten

Applicatie of Shell
De shell implementeert in eerst en vooral de IApplication interface. Het is de component die de functionaliteit aan de gebruiker beschikbaar stelt. Een

Generieke plugins

Specifieke plugins

De nieuwe user interface is gebaseerd op een samenhangend framework. Doel van het framework is de bouwstenen te bieden voor de bouw van een nieuwe UI. Het framework definieert een aantal interfaces en implementaties van de interfaces

View

Binnen dit framework Dit framework biedt een infrastructuur waarin via een plugin architectuur componenten kunnen worden gehangen. Deze componenten kunnen gebruik maken van de in het framework aangeboden functionaliteit en ook van de functionaliteit die door andere plugins wordt geboden.

Plugins
Via plugins kan de functionaliteit van het framework worden uitgebreid. Bestaande modellen kunnen in een specifieke plugin worden gewrapt en zo in het framework worden gehangen. Generieke functionaliteit kan worden geimplementeerd in een generieke plugin. Deze functionaliteit is dan beschikbaar binnen alle andere plugins. Denk in dit laatste geval aan een tijdreeks-editor of een map control.
discussie De interface die in een generieke plugin wordt geimplementeerd is onderdeel van het framework. Bijvoorbeeld het mapcontrol. Dit moet vervangen kunnen worden een ander mapcontrol zonder dat daar wijzigingen in specifieke plugins nodig zijn.

Basis functies framework
Functies die het framework zal bieden bestaan tenminste uit de volgende onderdelen:

Project Explorer
Projecten en de onderdelen van projecten zoals de cases en modellen worden gepresenteerd in de project explorer. De project explorer toont een hiërarchische presentatie van een project. Een gebruiker kan objecten in de project explorer selecteren en vervolgens een aktie op uitvoeren.

Generieke property editor
Elk project bestaat intern uit een verzameling instanties van verschillende objecttypen. De properties van deze objecten zijn via reflectie uit te vragen (eigenschap moderne programmeertalen) en hiervan gebruik makend is het mogelijk om elk type object te editen in een generieke property editor.

Menu en knoppenbalk
Het framework zal een aantal basiscommando's bieden en die beschikbaar stellen via menu's en/of knoppenbalk. Daarnaast biedt het framework de mogelijkheid aan plugins om menu's en knoppenbalk uit te breiden. Welke commando's op een moment beschikbaar zijn voor de gebruiker wordt bepaald door de plugin die op dat moment aktief is.

Voorbeeld

Toolbox
De toolbox bevat een lijst met tools die een gebruiker in een bepaalde context kan gebruiken. Gedacht kan worden aan de beschikbare objecten bij een 1d schematisatie. De functionaliteit van de toolbox zou ook geboden kunnen worden via menu/knoppenbalk. De werking met een toolbox is vaak intuïtiever door de drag en drop ondersteuning (zie ook Werkblad).
Een specifieke plugin kan dus elementen aan de toolbox toevoegen.

Logging
Framework en plugins kunnen voortdurend berichten genereren. Deze berichten worden verwerkt door de logger. De logger kan de berichten bijvoorbeeld opslaan in een bestand of op het scherm tonen. De logger kan onderscheidt maken tussen verschillende soorten berichten; bijvoorbeeld error, warning, etc.

Proces management
Sommige functies binnen een project kunnen teveel tijd kosten voor een gebruiker om op te wachten; doorrekenen model, inwinnen gegevens via internet, converteren gegevens. Dergelijke functies worden gemonitoord door het proces management en worden intern in queue opgeslagen. De processen in de queue hebben een status: waiting, running, failed, completed. De gebruiker heeft de mogelijkheid akties uit te voeren op de processen in de queue; bijvoorbeeld afbreken, voortgang tonen.
Er kunnen meerdere processen tegelijkertijd de status running hebben; bijvoorbeeld remote rekenen op een speciaal rekencluster.

Werkblad
Het werkblad is het onderdeel van de GUI dat typisch niet ingevuld zal worden door het framework zelf maar door de plugins. Het werkblad is het onderdeel waar de gebruiker primair data zal editen maar ook waar resultaten getoond kunnen worden.
Er zijn een aantal standaard plugins die een werkblad implementatie aanbieden die al dan niet uitbreidbaar is. Bij voorbeeld een generieke tijdreekseditor of een map control. Een specifieke plugin kan dan bijvoorbeeld het werkblad van het map control uitbreiden met een 1d schematisatie of een rekengrid.
meerdere plugins op 1 werkblad tegelijkertijd; bijvoorbeeld grid-editor en een 1d-model editor -> verschillende categoriën in de toolbox

DelftShell/Delfttools
Binnen Deltares is al een framework ontwikkeld dat deze infrastructuur biedt. DelftShell en DelftTools is een verzameling tools die als basis dient voor de implementatie van de nieuwe User Interface.
DelftShell is al gebruikt bij Habitat. DelftShell/Delfttools dekt nog niet alle gewenste functionaleit af maar is voldoende flexibel en uitbreidbaar. Het gebruik van DelftShell biedt de mogelijk om snel tot een eerste realisatie te komen en vervolgens meer tijd te besteden aan verbeteren van de User Interface.

$Waarom Delft Shell
$Uitleg onderdelen (project explorer, property editor(s), log window, toolbox, task $manager?, werkbladen, etc. )
Pluginstructuur: Generieke (tijdreeks-editor, gis-viewer, grafiek control) vs specifieke (sobek) plugins (plaatjes)
Voorbeelden met een 'bestaand' model (plaatjes)
Telichting begrippen
Folder, Project, Task en model
Input/output ?
Voorbeelden met een 'bestaand' model (plaatjes)
Datalaag
Afwegingen opslagformaten
Hoe om te gaan met bestaande formaten en nieuwe formaten
Programmeer interface voor alle ander modulen (modulen in de UI schrijven nooit zelf naar files).

Prioriteiten
Met afweging (language snel oude plugins, generieke property editor)
Iteratief verbeteren user experience
Produkten
Zie hoofdstuk 4
Werkbegroting en deelprojecten
Fasering en reviewing

  • No labels