Laureline's Wiki

Laureline's Wiki

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
heig:vcl:rapport:implementation:desktop:crawler [2016/05/31 17:07] Laureline Davidheig:vcl:rapport:implementation:desktop:crawler [2016/05/31 22:49] (current) kerroin
Line 3: Line 3:
 {{ :heig:vcl:rapport:implementation:desktop:crawler.png?nolink |Crawler}} {{ :heig:vcl:rapport:implementation:desktop:crawler.png?nolink |Crawler}}
  
-Le crawler est implémenté comme un module "standalone" qui peut être lancé depuis le menu principal de l'application.+Le crawler est implémenté comme un module "standalone" qui peut être lancé depuis le menu principal de l'application. Il implémente une interface pour intéragir avec le module de l'API.
  
 +Les boutons sont mis à jour en fonction de l'état du système en utilisant les bindings javafx afin de gérer facilement les mises à jour.
  
 +Cette interface utilise les procédures asynchrones fournies par l'API. Ceci permet à l'interface de reporter à l'utilisateur la progression des différentes étapes de manière fluide. 
 +
 +  ProgressFuture<WebSeries> future = crawler
 +    .crawlAsync(url)
 +    .whenProgressAsync(this::onCrawlProgress, PlatformExecutor.instance)
 +    .whenMessageAsync(this::onCrawlMessage, PlatformExecutor.instance)
 +    .whenCompleteAsync(this::onCrawlComplete, PlatformExecutor.instance);
 +    
 +  private void onCrawlProgress(ProgressFuture<WebSeries> future) {
 +    // Met à jour la barre de progression
 +    crawlProgress.setProgress(future.getProgress());
 +    crawlCount.setText(String.format("%d/%d", future.getCurrent(), future.getMaximum()));
 +  }
 +      
 +  private void onCrawlMessage(ProgressFuture<WebSeries> future) {
 +    // Affiche le message dans le log
 +    log.appendText(future.getMessage() + "\n");
 +  }
 +  
 +L'utilisation des méthodes de rapport asynchrones (''whenCompleteAsync'', ''whenProgressAsync'', ...) en conjonction avec un ''Executor'' spécial permettant aux méthodes d'être executées dans le contexte de l'UI permet une gestion très simple du rapport de progression.
 +
 +L'interface permet aussi de charger et sauvegarder des descripteurs dans le pipeline afin de permettre aux utilisateurs de conserver les métadonnées pour un téléchargement ultérieur.