From cbd16ec332a125bf1ef60f33bcabc14f7691ad49 Mon Sep 17 00:00:00 2001
From: FORESTIER Fabien <fabien.forestier@soprasteria.com>
Date: Tue, 29 May 2018 16:52:44 +0200
Subject: [PATCH] Refactoring metadata-list metadata-detail to dataset-list,
 dataset-detail and metadataService to DatasetService

---
 webapp/src/app/app.routing.spec.ts            | 18 ++++----
 .../header/header.component.spec.ts           |  4 +-
 .../components/main/main.component.spec.ts    | 16 +++----
 .../dataset-detail.component.html}            |  0
 .../dataset-detail.component.scss}            |  0
 .../dataset-detail.component.spec.ts}         | 28 ++++++------
 .../dataset-detail.component.ts}              | 14 +++---
 .../dataset-list.component.html}              |  0
 .../dataset-list.component.scss}              |  0
 .../dataset-list.component.spec.ts}           | 24 +++++-----
 .../dataset-list.component.ts}                | 44 ++++++++-----------
 .../filter-detail.component.spec.ts           |  4 +-
 .../filter-detail/filter-detail.component.ts  | 10 ++---
 .../filter-list/filter-list.component.spec.ts |  4 +-
 .../filter-list/filter-list.component.ts      | 14 +++---
 webapp/src/app/geosource/components/index.ts  | 12 ++---
 .../research/research.component.spec.ts       |  6 +--
 .../components/research/research.component.ts | 10 ++---
 .../search-bar/search-bar.component.spec.ts   |  6 +--
 .../search-bar/search-bar.component.ts        | 16 +++----
 .../components/sort/sort.component.spec.ts    |  4 +-
 .../components/sort/sort.component.ts         | 10 ++---
 .../app/geosource/geosource-routing.module.ts | 15 ++++---
 ...ervice.spec.ts => dataset.service.spec.ts} |  4 +-
 ...metadata.service.ts => dataset.service.ts} | 14 +++---
 webapp/src/app/geosource/services/index.ts    |  6 +--
 webapp/src/app/shared/models/index.ts         |  1 +
 .../shared/models/paginator-options.model.ts  |  6 +++
 28 files changed, 147 insertions(+), 143 deletions(-)
 rename webapp/src/app/geosource/components/{metadata-detail/metadata-detail.component.html => dataset-detail/dataset-detail.component.html} (100%)
 rename webapp/src/app/geosource/components/{metadata-detail/metadata-detail.component.scss => dataset-detail/dataset-detail.component.scss} (100%)
 rename webapp/src/app/geosource/components/{metadata-detail/metadata-detail.component.spec.ts => dataset-detail/dataset-detail.component.spec.ts} (71%)
 rename webapp/src/app/geosource/components/{metadata-detail/metadata-detail.component.ts => dataset-detail/dataset-detail.component.ts} (55%)
 rename webapp/src/app/geosource/components/{metadata-list/metadata-list.component.html => dataset-list/dataset-list.component.html} (100%)
 rename webapp/src/app/geosource/components/{metadata-list/metadata-list.component.scss => dataset-list/dataset-list.component.scss} (100%)
 rename webapp/src/app/geosource/components/{metadata-list/metadata-list.component.spec.ts => dataset-list/dataset-list.component.spec.ts} (88%)
 rename webapp/src/app/geosource/components/{metadata-list/metadata-list.component.ts => dataset-list/dataset-list.component.ts} (60%)
 rename webapp/src/app/geosource/services/{metadata.service.spec.ts => dataset.service.spec.ts} (68%)
 rename webapp/src/app/geosource/services/{metadata.service.ts => dataset.service.ts} (95%)
 create mode 100644 webapp/src/app/shared/models/index.ts
 create mode 100644 webapp/src/app/shared/models/paginator-options.model.ts

diff --git a/webapp/src/app/app.routing.spec.ts b/webapp/src/app/app.routing.spec.ts
index 8debd10f..fce834c7 100644
--- a/webapp/src/app/app.routing.spec.ts
+++ b/webapp/src/app/app.routing.spec.ts
@@ -17,7 +17,7 @@ import { EditorialisationComponents } from './editorialisation/components';
 import { SharedModule } from './shared/shared.module';
 import { EditorialisationService, EditorialisationServices } from './editorialisation/services';
 import { HttpClientModule } from '@angular/common/http';
-import { MetadataService, GeosourceServices } from './geosource/services';
+import { DatasetService, GeosourceServices } from './geosource/services';
 import { EditorialisationResolvers, PostDetailResolver, PostsListResolver, PostVideoResolver } from './editorialisation/resolvers';
 import { EditorialisationServiceMock } from './editorialisation/services/editorialisation.service.mock';
 import { PageResolver } from './editorialisation/resolvers/page.resolver';
@@ -78,23 +78,23 @@ describe('App routing', () => {
 
   // ********* From geosource module ********* //
 
-  it('navigate to "/recherche" redirects you to /recherche/metadata', done => {
+  it('navigate to "/recherche" redirects you to /recherche/datasets', done => {
     router.navigateByUrl('/recherche').then(() => {
-      expect(router.routerState.snapshot.url).toBe('/recherche/metadata');
+      expect(router.routerState.snapshot.url).toBe('/recherche/datasets');
       done();
     });
   });
 
-  it('navigate to "/recherche/metadata" takes you to /metadata', done => {
-    router.navigateByUrl('/recherche/metadata').then(() => {
-      expect(router.routerState.snapshot.url).toBe('/recherche/metadata');
+  it('navigate to "/recherche/datasets" takes you to /datasets', done => {
+    router.navigateByUrl('/recherche/datasets').then(() => {
+      expect(router.routerState.snapshot.url).toBe('/recherche/datasets');
       done();
     });
   });
 
-  it('navigate to "/recherche/metadata/abcdef" takes you to /recherche/metadata/abcdef', done => {
-    router.navigateByUrl('/recherche/metadata/abcdef').then(() => {
-      expect(router.routerState.snapshot.url).toBe('/recherche/metadata/abcdef');
+  it('navigate to "/recherche/datasets/abcdef" takes you to /recherche/datasets/abcdef', done => {
+    router.navigateByUrl('/recherche/datasets/abcdef').then(() => {
+      expect(router.routerState.snapshot.url).toBe('/recherche/datasets/abcdef');
       done();
     });
   });
diff --git a/webapp/src/app/core/components/header/header.component.spec.ts b/webapp/src/app/core/components/header/header.component.spec.ts
index eebdc9fc..b4e3f4d2 100644
--- a/webapp/src/app/core/components/header/header.component.spec.ts
+++ b/webapp/src/app/core/components/header/header.component.spec.ts
@@ -92,10 +92,10 @@ describe('HeaderComponent', () => {
     expect(location.path()).toBe('/accueil');
   }));
 
-  it('should redirect to recherche/metadata route when clicking the \'Les Données\' link', fakeAsync(() => {
+  it('should redirect to recherche/datasets route when clicking the \'Les Données\' link', fakeAsync(() => {
     debugElement.query(By.css('.research-link')).nativeElement.click();
     tick();
-    expect(location.path()).toBe('/recherche/metadata');
+    expect(location.path()).toBe('/recherche/datasets');
   }));
 
   it('should redirect to /demarche when clicking the Démarche link', fakeAsync(() => {
diff --git a/webapp/src/app/core/components/main/main.component.spec.ts b/webapp/src/app/core/components/main/main.component.spec.ts
index d9c7b9e1..9b9f9bf7 100644
--- a/webapp/src/app/core/components/main/main.component.spec.ts
+++ b/webapp/src/app/core/components/main/main.component.spec.ts
@@ -9,9 +9,9 @@ import { Router } from '@angular/router';
 import { Component } from '@angular/core';
 
 @Component({
-  template: `metadata`
+  template: `app-dataset-list`
 })
-export class MetadataListComponent {
+export class DatasetListComponent {
 }
 
 
@@ -24,7 +24,7 @@ describe('MainComponent', () => {
     TestBed.configureTestingModule({
       declarations: [
         MainComponent,
-        MetadataListComponent,
+        DatasetListComponent,
         MockComponent({ selector: 'app-header' }),
         MockComponent({ selector: 'app-footer' }),
       ],
@@ -32,11 +32,11 @@ describe('MainComponent', () => {
         RouterTestingModule.withRoutes([
           {
             path: '',
-            redirectTo: 'metadata',
+            redirectTo: 'datasets',
             pathMatch: 'full'
           },
-          { path: 'metadata',
-            component: MetadataListComponent
+          { path: 'datasets',
+            component: DatasetListComponent
           },
         ]),
       ]
@@ -54,11 +54,11 @@ describe('MainComponent', () => {
     expect(component).toBeTruthy();
   });
 
-  it('navigate to "" redirects you to /metadata', fakeAsync(() => {
+  it('navigate to "" redirects you to /datasets', fakeAsync(() => {
     const router: Router = TestBed.get(Router);
     location = TestBed.get(Location);
     router.navigate(['']);
     tick(50);
-    expect(location.path()).toBe('/metadata');
+    expect(location.path()).toBe('/datasets');
   }));
 });
diff --git a/webapp/src/app/geosource/components/metadata-detail/metadata-detail.component.html b/webapp/src/app/geosource/components/dataset-detail/dataset-detail.component.html
similarity index 100%
rename from webapp/src/app/geosource/components/metadata-detail/metadata-detail.component.html
rename to webapp/src/app/geosource/components/dataset-detail/dataset-detail.component.html
diff --git a/webapp/src/app/geosource/components/metadata-detail/metadata-detail.component.scss b/webapp/src/app/geosource/components/dataset-detail/dataset-detail.component.scss
similarity index 100%
rename from webapp/src/app/geosource/components/metadata-detail/metadata-detail.component.scss
rename to webapp/src/app/geosource/components/dataset-detail/dataset-detail.component.scss
diff --git a/webapp/src/app/geosource/components/metadata-detail/metadata-detail.component.spec.ts b/webapp/src/app/geosource/components/dataset-detail/dataset-detail.component.spec.ts
similarity index 71%
rename from webapp/src/app/geosource/components/metadata-detail/metadata-detail.component.spec.ts
rename to webapp/src/app/geosource/components/dataset-detail/dataset-detail.component.spec.ts
index 719c5a09..1a16ca4c 100644
--- a/webapp/src/app/geosource/components/metadata-detail/metadata-detail.component.spec.ts
+++ b/webapp/src/app/geosource/components/dataset-detail/dataset-detail.component.spec.ts
@@ -2,13 +2,13 @@ import { async, ComponentFixture, TestBed, fakeAsync } from '@angular/core/testi
 import { DebugElement, Directive, Input, NO_ERRORS_SCHEMA } from '@angular/core';
 import { ActivatedRoute, convertToParamMap, ParamMap } from '@angular/router';
 import { Observable } from 'rxjs/Observable';
-import { MetadataDetailComponent } from './metadata-detail.component';
-import { MetadataService} from '../../services/metadata.service';
+import { DatasetDetailComponent } from './dataset-detail.component';
+import { DatasetService} from '../../services/dataset.service';
 import { Metadata } from '../../models';
 import { RouterTestingModule } from '@angular/router/testing';
 import 'rxjs/add/observable/of';
 
-describe('MetadataDetailComponent', () => {
+describe('DatasetDetailComponent', () => {
 
   const metadata = {
     title: 'Metadata Title',
@@ -21,9 +21,9 @@ describe('MetadataDetailComponent', () => {
 
     const metadataId = 1;
 
-    let component: MetadataDetailComponent;
+    let component: DatasetDetailComponent;
     let activatedRouteMock: ActivatedRoute;
-    let metadataServiceMock: MetadataService;
+    let datasetServiceMock: DatasetService;
 
     beforeEach(() => {
       activatedRouteMock = {
@@ -31,13 +31,13 @@ describe('MetadataDetailComponent', () => {
           return null;
         },
       } as ActivatedRoute;
-      metadataServiceMock = jasmine.createSpyObj('metadataService', {
+      datasetServiceMock = jasmine.createSpyObj('datasetService', {
         getMetadataById: Observable.of(metadata),
       });
-      component = new MetadataDetailComponent(activatedRouteMock, metadataServiceMock);
+      component = new DatasetDetailComponent(activatedRouteMock, datasetServiceMock);
     });
 
-    it('should get metadata ID in path and get metadata details from service', () => {
+    it('should get dataset ID in path and get metadata details from service', () => {
       // Given
       const paramMapSpy = spyOnProperty(activatedRouteMock, 'paramMap', 'get').and
         .returnValue(Observable.of(convertToParamMap({ id: metadataId })));
@@ -47,7 +47,7 @@ describe('MetadataDetailComponent', () => {
 
       // Then
       expect(paramMapSpy).toHaveBeenCalled();
-      expect(metadataServiceMock.getMetadataById).toHaveBeenCalledWith(metadataId);
+      expect(datasetServiceMock.getMetadataById).toHaveBeenCalledWith(metadataId);
       expect(component.metadata).toBe(metadata);
     });
 
@@ -55,14 +55,14 @@ describe('MetadataDetailComponent', () => {
 
   describe('template', () => {
 
-    let fixture: ComponentFixture<MetadataDetailComponent>;
-    let comp: MetadataDetailComponent;
+    let fixture: ComponentFixture<DatasetDetailComponent>;
+    let comp: DatasetDetailComponent;
     let de: DebugElement;
 
     beforeEach(() => {
       TestBed.configureTestingModule({
         declarations: [
-          MetadataDetailComponent
+          DatasetDetailComponent
         ],
         imports: [
           RouterTestingModule,
@@ -72,7 +72,7 @@ describe('MetadataDetailComponent', () => {
         ],
         providers: [
           {
-            provide: MetadataService,
+            provide: DatasetService,
             useValue: {
               getMetadataById(): Observable<Metadata> {
                 return Observable.of(metadata);
@@ -84,7 +84,7 @@ describe('MetadataDetailComponent', () => {
     });
 
     beforeEach(fakeAsync(() => {
-      fixture = TestBed.createComponent(MetadataDetailComponent);
+      fixture = TestBed.createComponent(DatasetDetailComponent);
       de = fixture.debugElement;
       comp = fixture.componentInstance;
       fixture.detectChanges();
diff --git a/webapp/src/app/geosource/components/metadata-detail/metadata-detail.component.ts b/webapp/src/app/geosource/components/dataset-detail/dataset-detail.component.ts
similarity index 55%
rename from webapp/src/app/geosource/components/metadata-detail/metadata-detail.component.ts
rename to webapp/src/app/geosource/components/dataset-detail/dataset-detail.component.ts
index ebb42745..31221b74 100644
--- a/webapp/src/app/geosource/components/metadata-detail/metadata-detail.component.ts
+++ b/webapp/src/app/geosource/components/dataset-detail/dataset-detail.component.ts
@@ -2,26 +2,26 @@ import { Component, OnInit } from '@angular/core';
 import { Metadata } from '../../models';
 import { Observable } from 'rxjs/Observable';
 import { Router, ActivatedRoute, ParamMap } from '@angular/router';
-import { MetadataService } from '../../services';
+import { DatasetService } from '../../services';
 import 'rxjs/add/operator/switchMap';
 
 @Component({
-  selector: 'app-metadata-detail',
-  templateUrl: './metadata-detail.component.html',
-  styleUrls: ['./metadata-detail.component.scss']
+  selector: 'app-dataset-detail',
+  templateUrl: './dataset-detail.component.html',
+  styleUrls: ['./dataset-detail.component.scss']
 })
-export class MetadataDetailComponent implements OnInit {
+export class DatasetDetailComponent implements OnInit {
 
   metadata: Metadata;
 
   constructor(
     private _route: ActivatedRoute,
-    private _metadataService: MetadataService
+    private _datasetService: DatasetService
   ) {}
 
   ngOnInit() {
     this._route.paramMap
-      .switchMap((params: ParamMap) => this._metadataService.getMetadataById(params.get('id')))
+      .switchMap((params: ParamMap) => this._datasetService.getMetadataById(params.get('id')))
       .subscribe((metadata: Metadata) => {
         this.metadata = metadata;
       });
diff --git a/webapp/src/app/geosource/components/metadata-list/metadata-list.component.html b/webapp/src/app/geosource/components/dataset-list/dataset-list.component.html
similarity index 100%
rename from webapp/src/app/geosource/components/metadata-list/metadata-list.component.html
rename to webapp/src/app/geosource/components/dataset-list/dataset-list.component.html
diff --git a/webapp/src/app/geosource/components/metadata-list/metadata-list.component.scss b/webapp/src/app/geosource/components/dataset-list/dataset-list.component.scss
similarity index 100%
rename from webapp/src/app/geosource/components/metadata-list/metadata-list.component.scss
rename to webapp/src/app/geosource/components/dataset-list/dataset-list.component.scss
diff --git a/webapp/src/app/geosource/components/metadata-list/metadata-list.component.spec.ts b/webapp/src/app/geosource/components/dataset-list/dataset-list.component.spec.ts
similarity index 88%
rename from webapp/src/app/geosource/components/metadata-list/metadata-list.component.spec.ts
rename to webapp/src/app/geosource/components/dataset-list/dataset-list.component.spec.ts
index c097e241..3a2ad8db 100644
--- a/webapp/src/app/geosource/components/metadata-list/metadata-list.component.spec.ts
+++ b/webapp/src/app/geosource/components/dataset-list/dataset-list.component.spec.ts
@@ -1,7 +1,7 @@
 import { async, ComponentFixture, TestBed } from '@angular/core/testing';
-import { MetadataListComponent } from './metadata-list.component';
+import { DatasetListComponent } from './dataset-list.component';
 import { ActivatedRoute } from '@angular/router';
-import { MetadataService, ElasticsearchService } from '../../services';
+import { DatasetService, ElasticsearchService } from '../../services';
 import { Observable } from 'rxjs/Observable';
 import { IMetadata, Dataset, SearchSuggestion } from '../../models';
 import { RouterTestingModule } from '@angular/router/testing';
@@ -15,7 +15,7 @@ import { FilterDetailComponent } from '../filter-list/filter-detail/filter-detai
 import { PaginatorComponent } from '../../../shared/components/paginator/paginator.component';
 import { FormsModule } from '@angular/forms';
 
-describe('MetadataListComponent', () => {
+describe('DatasetListComponent', () => {
   const datasetList = [{
     dataset_id: 'abcesr',
     highlights: {
@@ -58,9 +58,9 @@ describe('MetadataListComponent', () => {
     }
   }] as Dataset[];
 
-  let component: MetadataListComponent;
-  let fixture: ComponentFixture<MetadataListComponent>;
-  let service: MetadataService;
+  let component: DatasetListComponent;
+  let fixture: ComponentFixture<DatasetListComponent>;
+  let service: DatasetService;
   let elasticsearchService: ElasticsearchService;
 
   const searchSubject = new Subject<string>();
@@ -68,7 +68,7 @@ describe('MetadataListComponent', () => {
   beforeEach(async(() => {
     TestBed.configureTestingModule({
       declarations: [
-        MetadataListComponent,
+        DatasetListComponent,
         MockComponent({ selector: 'app-sort' }),
         FilterListComponent,
         FilterDetailComponent,
@@ -81,7 +81,7 @@ describe('MetadataListComponent', () => {
         FormsModule
       ],
       providers: [
-        MetadataService,
+        DatasetService,
         ElasticsearchService
       ],
     })
@@ -89,9 +89,9 @@ describe('MetadataListComponent', () => {
   }));
 
   beforeEach(() => {
-    fixture = TestBed.createComponent(MetadataListComponent);
+    fixture = TestBed.createComponent(DatasetListComponent);
     component = fixture.componentInstance;
-    service = TestBed.get(MetadataService);
+    service = TestBed.get(DatasetService);
     elasticsearchService  = TestBed.get(ElasticsearchService);
     spyOn(elasticsearchService, 'getSuggestion').and.returnValue(Observable.of(new SearchSuggestion()));
     fixture.detectChanges();
@@ -152,13 +152,13 @@ describe('MetadataListComponent', () => {
       expect(component.paginator.pageSize).toEqual(5);
     });
 
-    it('should get count of metadata from service', () => {
+    it('should get count of dataset from service', () => {
       // When
       component.search();
       expect(component.paginator.length).toBe(10);
     });
 
-    it('should get the list of metadata from service', () => {
+    it('should get the list of dataset from service', () => {
       component.search();
       expect(component.datasetList).toBe(datasetList);
     });
diff --git a/webapp/src/app/geosource/components/metadata-list/metadata-list.component.ts b/webapp/src/app/geosource/components/dataset-list/dataset-list.component.ts
similarity index 60%
rename from webapp/src/app/geosource/components/metadata-list/metadata-list.component.ts
rename to webapp/src/app/geosource/components/dataset-list/dataset-list.component.ts
index c22e4ed2..6cd414b8 100644
--- a/webapp/src/app/geosource/components/metadata-list/metadata-list.component.ts
+++ b/webapp/src/app/geosource/components/dataset-list/dataset-list.component.ts
@@ -1,22 +1,16 @@
 import { Component, OnInit, OnDestroy, ViewChild } from '@angular/core';
-import { MetadataService } from '../../services/metadata.service';
+import { DatasetService } from '../../services/dataset.service';
 import { Dataset, IMetadataUri, SearchSuggestion } from '../../models';
 import { Subscription } from 'rxjs/Subscription';
 import { ElasticsearchService } from '../../services';
-
-interface PaginatorOptions {
-  pageIndex: number;
-  length: number;
-  pageSize: number;
-  pageSizeOptions: number[];
-}
+import { PaginatorOptions } from '../../../shared/models';
 
 @Component({
-  selector: 'app-metadata-list',
-  templateUrl: './metadata-list.component.html',
-  styleUrls: ['./metadata-list.component.scss']
+  selector: 'app-dataset-list',
+  templateUrl: './dataset-list.component.html',
+  styleUrls: ['./dataset-list.component.scss']
 })
-export class MetadataListComponent implements OnInit, OnDestroy {
+export class DatasetListComponent implements OnInit, OnDestroy {
 
   datasetList: Dataset[];
   searchChangeSub: Subscription;
@@ -34,17 +28,17 @@ export class MetadataListComponent implements OnInit, OnDestroy {
   suggestion = new SearchSuggestion({});
 
   constructor(
-    private metadataService: MetadataService,
+    private datasetService: DatasetService,
     private elasticsearchService: ElasticsearchService
   ) { }
 
   ngOnInit() {
     this.loading = true;
-    this.paginator.pageIndex = this.metadataService.pageIndex + 1;
-    this.paginator.pageSize = this.metadataService.pageSize;
+    this.paginator.pageIndex = this.datasetService.pageIndex + 1;
+    this.paginator.pageSize = this.datasetService.pageSize;
     this.search();
     this.getSuggestion();
-    this.searchChangeSub = this.metadataService.searchChange$.subscribe(
+    this.searchChangeSub = this.datasetService.searchChange$.subscribe(
       (value) => {
         this.showProgressBar = true;
         this.search();
@@ -59,12 +53,12 @@ export class MetadataListComponent implements OnInit, OnDestroy {
 
   search() {
     this.loading = true;
-    this.metadataService.getDatasetList().subscribe(
+    this.datasetService.getDatasetList().subscribe(
       (res) => {
         this.datasetList = res;
-        this.paginator.pageSize = this.metadataService.pageSize;
-        this.paginator.pageIndex = this.metadataService.pageIndex + 1;
-        this.paginator.length = this.metadataService.resultsCount;
+        this.paginator.pageSize = this.datasetService.pageSize;
+        this.paginator.pageIndex = this.datasetService.pageIndex + 1;
+        this.paginator.length = this.datasetService.resultsCount;
         this.showProgressBar = false;
         this.loading = false;
       }, (err) => {
@@ -73,13 +67,13 @@ export class MetadataListComponent implements OnInit, OnDestroy {
     );
   }
 
-  // When pagination is changed by user, we update metadata with new pagination options
+  // When pagination is changed by user, we update datasetList with new pagination options
   changePagination(pageIndex) {
-    this.metadataService.paginationChanged(this.paginator.pageSize, pageIndex - 1 );
+    this.datasetService.paginationChanged(this.paginator.pageSize, pageIndex - 1 );
   }
 
   changePageSize(pageSize) {
-    this.metadataService.paginationChanged(pageSize, 0 );
+    this.datasetService.paginationChanged(pageSize, 0 );
   }
 
   formatFoundItem(e) {
@@ -97,7 +91,7 @@ export class MetadataListComponent implements OnInit, OnDestroy {
   }
 
   getSuggestion() {
-    this.elasticsearchService.getSuggestion(this.metadataService.searchString).subscribe(
+    this.elasticsearchService.getSuggestion(this.datasetService.searchString).subscribe(
       (suggestion) => {
         this.suggestion = suggestion;
         if (this.suggestion.text !== '' && this.suggestion.text !== null && this.suggestion.text !== undefined) {
@@ -110,7 +104,7 @@ export class MetadataListComponent implements OnInit, OnDestroy {
   }
 
   useSuggestion() {
-    this.metadataService.searchChanged(this.suggestion.text);
+    this.datasetService.searchChanged(this.suggestion.text);
   }
 
 }
diff --git a/webapp/src/app/geosource/components/filter-list/filter-detail/filter-detail.component.spec.ts b/webapp/src/app/geosource/components/filter-list/filter-detail/filter-detail.component.spec.ts
index a197127d..120dee25 100644
--- a/webapp/src/app/geosource/components/filter-list/filter-detail/filter-detail.component.spec.ts
+++ b/webapp/src/app/geosource/components/filter-list/filter-detail/filter-detail.component.spec.ts
@@ -1,7 +1,7 @@
 import { async, ComponentFixture, TestBed } from '@angular/core/testing';
 
 import { FilterDetailComponent } from './filter-detail.component';
-import { MetadataService, ElasticsearchService } from '../../../services';
+import { DatasetService, ElasticsearchService } from '../../../services';
 import { HttpClientModule } from '@angular/common/http';
 import { FilterListComponent } from '../..';
 import { Component } from '@angular/core';
@@ -20,7 +20,7 @@ describe('FilterDetailComponent', () => {
         HttpClientModule
       ],
       providers: [
-        MetadataService,
+        DatasetService,
         ElasticsearchService
       ]
     })
diff --git a/webapp/src/app/geosource/components/filter-list/filter-detail/filter-detail.component.ts b/webapp/src/app/geosource/components/filter-list/filter-detail/filter-detail.component.ts
index 94b42220..b26d7c2d 100644
--- a/webapp/src/app/geosource/components/filter-list/filter-detail/filter-detail.component.ts
+++ b/webapp/src/app/geosource/components/filter-list/filter-detail/filter-detail.component.ts
@@ -1,4 +1,4 @@
-import {MetadataService} from '../../../services/metadata.service';
+import { DatasetService } from '../../../services/dataset.service';
 import { Component, OnInit, Input } from '@angular/core';
 import { IFilter } from '../../../models';
 
@@ -11,7 +11,7 @@ export class FilterDetailComponent implements OnInit {
   @Input() filter: IFilter;
   showList = false;
   constructor(
-    private _metadataService: MetadataService
+    private _datasetService: DatasetService
   ) {}
 
   ngOnInit() {
@@ -45,14 +45,14 @@ export class FilterDetailComponent implements OnInit {
   }
 
   addFilter(field, value) {
-    this._metadataService.addFilter(field, value);
+    this._datasetService.addFilter(field, value);
   }
 
   changeFilter(field, aggregation) {
     if (aggregation.isActive) {
-      this._metadataService.removeFilter(field, aggregation);
+      this._datasetService.removeFilter(field, aggregation);
     } else {
-      this._metadataService.addFilter(field, aggregation);
+      this._datasetService.addFilter(field, aggregation);
     }
   }
 
diff --git a/webapp/src/app/geosource/components/filter-list/filter-list.component.spec.ts b/webapp/src/app/geosource/components/filter-list/filter-list.component.spec.ts
index 25548b73..465193ef 100644
--- a/webapp/src/app/geosource/components/filter-list/filter-list.component.spec.ts
+++ b/webapp/src/app/geosource/components/filter-list/filter-list.component.spec.ts
@@ -2,7 +2,7 @@ import { async, ComponentFixture, TestBed } from '@angular/core/testing';
 
 import { FilterListComponent } from './filter-list.component';
 import { FilterDetailComponent } from './filter-detail/filter-detail.component';
-import { MetadataService, ElasticsearchService } from '../../services';
+import { DatasetService, ElasticsearchService } from '../../services';
 import { HttpClientModule } from '@angular/common/http';
 
 describe('FilterListComponent', () => {
@@ -19,7 +19,7 @@ describe('FilterListComponent', () => {
         HttpClientModule
       ],
       providers: [
-        MetadataService,
+        DatasetService,
         ElasticsearchService
       ]
     })
diff --git a/webapp/src/app/geosource/components/filter-list/filter-list.component.ts b/webapp/src/app/geosource/components/filter-list/filter-list.component.ts
index b5044a92..21fd7129 100644
--- a/webapp/src/app/geosource/components/filter-list/filter-list.component.ts
+++ b/webapp/src/app/geosource/components/filter-list/filter-list.component.ts
@@ -1,5 +1,5 @@
 import { Component, OnInit, OnDestroy } from '@angular/core';
-import { MetadataService } from '../../services';
+import { DatasetService } from '../../services';
 import { Subscription } from 'rxjs/Subscription';
 import { IFilter } from '../../models';
 
@@ -10,17 +10,17 @@ import { IFilter } from '../../models';
 })
 export class FilterListComponent implements OnInit, OnDestroy {
 
-  private _metadataReloaded: Subscription;
+  private _datasetsReloaded: Subscription;
   filters: Array<IFilter>;
 
   constructor(
-    private _metadataService: MetadataService
+    private _datasetService: DatasetService
   ) {}
 
   ngOnInit() {
-    this._metadataReloaded = this._metadataService.metadataReloaded$.subscribe(
+    this._datasetsReloaded = this._datasetService.datasetsReloaded$.subscribe(
       (value) => {
-        const filters = this._metadataService.filters;
+        const filters = this._datasetService.filters;
         // If one filter is used as an active filter, we remove it of 'aggregations' property
         // that are used to display the filters categories
         filters.forEach(filter => {
@@ -38,11 +38,11 @@ export class FilterListComponent implements OnInit, OnDestroy {
   }
 
   removeFilter(field, value) {
-    this._metadataService.removeFilter(field, value);
+    this._datasetService.removeFilter(field, value);
   }
 
   ngOnDestroy() {
-    this._metadataReloaded.unsubscribe();
+    this._datasetsReloaded.unsubscribe();
   }
 
 }
diff --git a/webapp/src/app/geosource/components/index.ts b/webapp/src/app/geosource/components/index.ts
index ac6b444d..ad0621fd 100644
--- a/webapp/src/app/geosource/components/index.ts
+++ b/webapp/src/app/geosource/components/index.ts
@@ -1,21 +1,21 @@
-import { MetadataListComponent } from './metadata-list/metadata-list.component';
-import { MetadataDetailComponent } from './metadata-detail/metadata-detail.component';
+import { DatasetListComponent } from './dataset-list/dataset-list.component';
+import { DatasetDetailComponent } from './dataset-detail/dataset-detail.component';
 import { SearchBarComponent } from './search-bar/search-bar.component';
 import { ResearchComponent } from './research/research.component';
 import { SortComponent } from './sort/sort.component';
 import { FilterListComponent } from './filter-list/filter-list.component';
 import { FilterDetailComponent } from './filter-list/filter-detail/filter-detail.component';
 
-export * from './metadata-detail/metadata-detail.component';
-export * from './metadata-list/metadata-list.component';
+export * from './dataset-detail/dataset-detail.component';
+export * from './dataset-list/dataset-list.component';
 export * from './filter-list/filter-list.component';
 export * from './search-bar/search-bar.component';
 export * from './research/research.component';
 export * from './sort/sort.component';
 
 export const GeosourceComponents = [
-  MetadataDetailComponent,
-  MetadataListComponent,
+  DatasetDetailComponent,
+  DatasetListComponent,
   SearchBarComponent,
   ResearchComponent,
   SortComponent,
diff --git a/webapp/src/app/geosource/components/research/research.component.spec.ts b/webapp/src/app/geosource/components/research/research.component.spec.ts
index 1797f834..0e5771dd 100644
--- a/webapp/src/app/geosource/components/research/research.component.spec.ts
+++ b/webapp/src/app/geosource/components/research/research.component.spec.ts
@@ -3,7 +3,7 @@ import { async, ComponentFixture, TestBed } from '@angular/core/testing';
 import { ResearchComponent } from './research.component';
 import { MockComponent } from 'ng2-mock-component';
 import { RouterTestingModule } from '@angular/router/testing';
-import { MetadataService, ElasticsearchService } from '../../services';
+import { DatasetService, ElasticsearchService } from '../../services';
 import { HttpClientModule } from '@angular/common/http';
 
 describe('ResearchComponent', () => {
@@ -19,10 +19,10 @@ describe('ResearchComponent', () => {
       declarations: [
         ResearchComponent,
         MockComponent({ selector: 'app-search-bar' }),
-        MockComponent({ selector: 'app-metadata-list' }),
+        MockComponent({ selector: 'app-dataset-list' }),
       ],
       providers: [
-        MetadataService,
+        DatasetService,
         ElasticsearchService
       ]
     })
diff --git a/webapp/src/app/geosource/components/research/research.component.ts b/webapp/src/app/geosource/components/research/research.component.ts
index f19402be..8c8d95c7 100644
--- a/webapp/src/app/geosource/components/research/research.component.ts
+++ b/webapp/src/app/geosource/components/research/research.component.ts
@@ -1,5 +1,5 @@
 import { Component, OnInit } from '@angular/core';
-import { MetadataService } from '../../services';
+import { DatasetService } from '../../services';
 import { Router, ActivatedRoute } from '@angular/router';
 
 @Component({
@@ -10,15 +10,15 @@ import { Router, ActivatedRoute } from '@angular/router';
 export class ResearchComponent implements OnInit {
 
   constructor(
-    private _metadataService: MetadataService,
+    private _datasetService: DatasetService,
     private _router: Router,
     private _route: ActivatedRoute
   ) { }
 
   ngOnInit() {
-    this._metadataService.searchChange$.subscribe(() => {
-      if ( this._route.snapshot.url[this._route.snapshot.url.length - 1].path !== 'metadata' ) {
-        this._router.navigate(['metadata'], { relativeTo: this._route});
+    this._datasetService.searchChange$.subscribe(() => {
+      if ( this._route.snapshot.url[this._route.snapshot.url.length - 1].path !== 'datasets' ) {
+        this._router.navigate(['datasets'], { relativeTo: this._route});
       }
     });
   }
diff --git a/webapp/src/app/geosource/components/search-bar/search-bar.component.spec.ts b/webapp/src/app/geosource/components/search-bar/search-bar.component.spec.ts
index 5ca35422..b507e740 100644
--- a/webapp/src/app/geosource/components/search-bar/search-bar.component.spec.ts
+++ b/webapp/src/app/geosource/components/search-bar/search-bar.component.spec.ts
@@ -1,5 +1,5 @@
-import {ElasticsearchService} from '../../services/elasticsearch.service';
-import {MetadataService} from '../../services/metadata.service';
+import { ElasticsearchService } from '../../services/elasticsearch.service';
+import { DatasetService } from '../../services/dataset.service';
 import { async, ComponentFixture, TestBed } from '@angular/core/testing';
 
 import { SearchBarComponent } from './search-bar.component';
@@ -22,7 +22,7 @@ describe('SearchBarComponent', () => {
         MockComponent({ selector: 'app-search-input' }),
       ],
       providers: [
-        MetadataService,
+        DatasetService,
         ElasticsearchService
       ]
     })
diff --git a/webapp/src/app/geosource/components/search-bar/search-bar.component.ts b/webapp/src/app/geosource/components/search-bar/search-bar.component.ts
index 808c8318..7bc410a2 100644
--- a/webapp/src/app/geosource/components/search-bar/search-bar.component.ts
+++ b/webapp/src/app/geosource/components/search-bar/search-bar.component.ts
@@ -1,5 +1,5 @@
 import { Component, OnInit } from '@angular/core';
-import { MetadataService, ElasticsearchService } from '../../services';
+import { DatasetService, ElasticsearchService } from '../../services';
 import { SearchCompletion } from '../../models';
 
 @Component({
@@ -16,7 +16,7 @@ export class SearchBarComponent implements OnInit {
   displayAutocomplete: boolean;
 
   constructor(
-    private _metadataService: MetadataService,
+    private _datasetService: DatasetService,
     private _elasticSearchService: ElasticsearchService,
   ) {
     this.options_autocomplete = [];
@@ -25,17 +25,17 @@ export class SearchBarComponent implements OnInit {
    }
 
   ngOnInit() {
-    this.searchValue = this._metadataService.searchString;
+    this.searchValue = this._datasetService.searchString;
     // When the search value has changed, we reset the autocomplete list and focus element
-    this._metadataService.searchChange$.subscribe(
+    this._datasetService.searchChange$.subscribe(
       () => {
-        this.searchValue =  this._metadataService.searchString;
+        this.searchValue =  this._datasetService.searchString;
         this.options_autocomplete = [];
         this.currentAutocompleteFocus = -1;
       }
     );
     // Used to display the loading icon
-    this._metadataService.isLoading$.subscribe((value) => {
+    this._datasetService.isLoading$.subscribe((value) => {
       this.isLoading = value;
     });
   }
@@ -64,12 +64,12 @@ export class SearchBarComponent implements OnInit {
           this.searchValue = this.options_autocomplete[this.currentAutocompleteFocus].text;
           this.currentAutocompleteFocus = -1;
         }
-        this._metadataService.searchChanged(this.searchValue);
+        this._datasetService.searchChanged(this.searchValue);
         this.options_autocomplete = [];
         break;
       case 'optionSelected':
       case 'reset':
-        this._metadataService.searchChanged(this.searchValue);
+        this._datasetService.searchChanged(this.searchValue);
         this.options_autocomplete = [];
         break;
       default:
diff --git a/webapp/src/app/geosource/components/sort/sort.component.spec.ts b/webapp/src/app/geosource/components/sort/sort.component.spec.ts
index 901114fa..9fc1c660 100644
--- a/webapp/src/app/geosource/components/sort/sort.component.spec.ts
+++ b/webapp/src/app/geosource/components/sort/sort.component.spec.ts
@@ -1,7 +1,7 @@
 import { async, ComponentFixture, TestBed } from '@angular/core/testing';
 
 import { SortComponent } from './sort.component';
-import { MetadataService, ElasticsearchService } from '../../services';
+import { DatasetService, ElasticsearchService } from '../../services';
 import { HttpClientModule } from '@angular/common/http';
 import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
 
@@ -17,7 +17,7 @@ describe('SortComponent', () => {
       ],
       declarations: [ SortComponent ],
       providers: [
-        MetadataService,
+        DatasetService,
         ElasticsearchService
       ],
     })
diff --git a/webapp/src/app/geosource/components/sort/sort.component.ts b/webapp/src/app/geosource/components/sort/sort.component.ts
index f03918a7..7da9c027 100644
--- a/webapp/src/app/geosource/components/sort/sort.component.ts
+++ b/webapp/src/app/geosource/components/sort/sort.component.ts
@@ -1,5 +1,5 @@
 import { Component, OnInit } from '@angular/core';
-import { MetadataService } from '../../services';
+import { DatasetService } from '../../services';
 import { ISortOption } from '../../models';
 
 interface IDropdownOptions {
@@ -20,7 +20,7 @@ export class SortComponent implements OnInit {
   selectedOption: ISortOption;
 
   constructor(
-    private _metadataService: MetadataService
+    private _datasetService: DatasetService
   ) {
     this.options = [
       {
@@ -39,17 +39,17 @@ export class SortComponent implements OnInit {
   }
 
   ngOnInit() {
-    this.selectedOption = this._metadataService.sortOptions;
+    this.selectedOption = this._datasetService.sortOptions;
   }
 
   sortValueChanged(value) {
     this.selectedOption.value = value;
-    this._metadataService.sortChanged(value);
+    this._datasetService.sortChanged(value);
   }
 
   toggleOrder() {
     this.selectedOption.order = this.selectedOption.order === 'asc' ? 'desc' : 'asc';
-    this._metadataService.orderChanged(this.selectedOption.order);
+    this._datasetService.orderChanged(this.selectedOption.order);
   }
 
 }
diff --git a/webapp/src/app/geosource/geosource-routing.module.ts b/webapp/src/app/geosource/geosource-routing.module.ts
index d41296c7..ef446d5d 100644
--- a/webapp/src/app/geosource/geosource-routing.module.ts
+++ b/webapp/src/app/geosource/geosource-routing.module.ts
@@ -1,6 +1,6 @@
 import { NgModule } from '@angular/core';
 import { Routes, RouterModule } from '@angular/router';
-import { MetadataListComponent, MetadataDetailComponent, ResearchComponent } from './components';
+import { DatasetListComponent, DatasetDetailComponent, ResearchComponent } from './components';
 
 export const routes: Routes = [
   {
@@ -9,16 +9,19 @@ export const routes: Routes = [
     children: [
       {
         path: '',
-        redirectTo: 'metadata',
+        redirectTo: 'datasets',
         pathMatch: 'full'
       },
       {
-        path: 'metadata/:id',
-        component: MetadataDetailComponent
+        path: 'datasets/:id',
+        component: DatasetDetailComponent,
+        children: [
+
+        ]
       },
       {
-        path: 'metadata',
-        component: MetadataListComponent
+        path: 'datasets',
+        component: DatasetListComponent
       },
     ]
   },
diff --git a/webapp/src/app/geosource/services/metadata.service.spec.ts b/webapp/src/app/geosource/services/dataset.service.spec.ts
similarity index 68%
rename from webapp/src/app/geosource/services/metadata.service.spec.ts
rename to webapp/src/app/geosource/services/dataset.service.spec.ts
index 2947059c..b232c648 100644
--- a/webapp/src/app/geosource/services/metadata.service.spec.ts
+++ b/webapp/src/app/geosource/services/dataset.service.spec.ts
@@ -1,8 +1,8 @@
 import { TestBed, inject } from '@angular/core/testing';
 import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing';
-import { MetadataService } from './metadata.service';
+import { DatasetService } from './dataset.service';
 import { IMetadata } from '../models';
 
-describe('MetadataService', () => {
+describe('DatasetService', () => {
 
 });
diff --git a/webapp/src/app/geosource/services/metadata.service.ts b/webapp/src/app/geosource/services/dataset.service.ts
similarity index 95%
rename from webapp/src/app/geosource/services/metadata.service.ts
rename to webapp/src/app/geosource/services/dataset.service.ts
index c2f55ea4..85a1338c 100644
--- a/webapp/src/app/geosource/services/metadata.service.ts
+++ b/webapp/src/app/geosource/services/dataset.service.ts
@@ -14,10 +14,10 @@ import {
 import { ElasticsearchService } from './elasticsearch.service';
 
 @Injectable()
-export class MetadataService {
+export class DatasetService {
 
   private _searchChangeSubject: Subject<any>;
-  private _metadataReloadedSubject: Subject<any>;
+  private _datasetsReloadedSubject: Subject<any>;
   private _elasticsearchOptions: ElasticsearchOptions;
   private _resultsCount: number;
   private _isLoading: Subject<boolean>;
@@ -26,13 +26,13 @@ export class MetadataService {
     private _elasticsearchService: ElasticsearchService
   ) {
     this._searchChangeSubject = new Subject<any>();
-    this._metadataReloadedSubject = new Subject<any>();
+    this._datasetsReloadedSubject = new Subject<any>();
     this._elasticsearchOptions = new ElasticsearchOptions();
     this._isLoading = new Subject();
 
   }
 
-  // Get metadata from elasticsearch.
+  // Get datasets from elasticsearch.
   // Options: filter by query string and pagination
   getDatasetList(): Observable<Dataset[]> {
     this._isLoading.next(true);
@@ -52,7 +52,7 @@ export class MetadataService {
           }
         });
         // NOtify that data have been reloaded
-        this._metadataReloadedSubject.next();
+        this._datasetsReloadedSubject.next();
 
         this._isLoading.next(false);
         return this.initilizeDatasetList(e.hits.hits);
@@ -175,8 +175,8 @@ export class MetadataService {
     return this._isLoading.asObservable();
   }
 
-  get metadataReloaded$(): Observable<string> {
-    return this._metadataReloadedSubject.asObservable();
+  get datasetsReloaded$(): Observable<string> {
+    return this._datasetsReloadedSubject.asObservable();
   }
 
   get searchString(): string {
diff --git a/webapp/src/app/geosource/services/index.ts b/webapp/src/app/geosource/services/index.ts
index c1207247..764bd841 100644
--- a/webapp/src/app/geosource/services/index.ts
+++ b/webapp/src/app/geosource/services/index.ts
@@ -1,10 +1,10 @@
-import { MetadataService } from './metadata.service';
+import { DatasetService } from './dataset.service';
 import { ElasticsearchService } from './elasticsearch.service';
 
-export * from './metadata.service';
+export * from './dataset.service';
 export * from './elasticsearch.service';
 
 export const GeosourceServices = [
-  MetadataService,
+  DatasetService,
   ElasticsearchService
 ];
diff --git a/webapp/src/app/shared/models/index.ts b/webapp/src/app/shared/models/index.ts
new file mode 100644
index 00000000..a02661fa
--- /dev/null
+++ b/webapp/src/app/shared/models/index.ts
@@ -0,0 +1 @@
+export * from './paginator-options.model';
diff --git a/webapp/src/app/shared/models/paginator-options.model.ts b/webapp/src/app/shared/models/paginator-options.model.ts
new file mode 100644
index 00000000..d5818ff4
--- /dev/null
+++ b/webapp/src/app/shared/models/paginator-options.model.ts
@@ -0,0 +1,6 @@
+export interface PaginatorOptions {
+  pageIndex: number;
+  length: number;
+  pageSize: number;
+  pageSizeOptions: number[];
+}
-- 
GitLab