diff --git a/src/app/app-routing.module.ts b/src/app/app-routing.module.ts index b95f008cfeea78df5bde88b6f340fb5092c44168..29b4acef3f77d66270c726b14a2397d6ca9f82e5 100644 --- a/src/app/app-routing.module.ts +++ b/src/app/app-routing.module.ts @@ -11,7 +11,7 @@ export const routes: Routes = [ path: 'pages', loadChildren: () => import('./pages/pages.module') .then(m => m.PagesModule), - canActivate: [AuthGuard] + }, { path: 'auth', diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 06bba52ded6bcfe5ff8ecaad395c8310df4413b7..3f50ebf6dcc789a081bf8913ad37224d37065c10 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -74,7 +74,7 @@ export function createTranslateLoader(http: HttpClient) { view: ['external-app', 'maps', 'home', 'about', 'charts', 'lorem-ipsum'] }, CITIZEN: { - view: ['home', 'about', 'ui-features'] + view: ['home', 'about', 'ui-features','catalogues'] } }, }) diff --git a/src/app/auth/services/token.interceptor.ts b/src/app/auth/services/token.interceptor.ts index e07b48d45bbac95eada7af53ce352c630e0ed4ed..88712e4d12f3aff403c3db5c5348bc9ba9a64ac5 100644 --- a/src/app/auth/services/token.interceptor.ts +++ b/src/app/auth/services/token.interceptor.ts @@ -7,12 +7,13 @@ import { } from '@angular/common/http'; import { Observable } from 'rxjs'; import { NbAuthOAuth2JWTToken, NbAuthOAuth2Token, NbAuthService } from '@nebular/auth'; +import { ConfigService } from '@ngx-config/core'; @Injectable() export class TokenInterceptor implements HttpInterceptor { token; - constructor(public auth: NbAuthService) { } + constructor(public auth: NbAuthService, public config:ConfigService) {} intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> { if (req.url.indexOf('/assets/') > -1) { @@ -23,6 +24,10 @@ export class TokenInterceptor implements HttpInterceptor { return next.handle(req); } + if (req.url.indexOf(this.config.getSettings('idra_base_url')) > -1) { + return next.handle(req); + } + this.auth.getToken().subscribe((x: NbAuthOAuth2JWTToken) => this.token = x); let newHeaders = req.headers; diff --git a/src/app/pages/data-catalogue/data-catalogue-routing.module.ts b/src/app/pages/data-catalogue/data-catalogue-routing.module.ts new file mode 100644 index 0000000000000000000000000000000000000000..cd15f655b342fbb545622e90aef5cf3be0adb772 --- /dev/null +++ b/src/app/pages/data-catalogue/data-catalogue-routing.module.ts @@ -0,0 +1,24 @@ +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; +import { DataCatalogueComponent } from './data-catalogue.component'; +import { DatasetComponent } from './dataset/dataset.component'; +import { SearchComponent } from './search/search.component'; + +const routes: Routes = [{ + path: '', + redirectTo:'', + component: DataCatalogueComponent, + children: [ { + path: 'search', + component: SearchComponent, + }, { + path: 'datasets/:id', + component: DatasetComponent, + }], +}]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule] +}) +export class DataCatalogueRoutingModule { } diff --git a/src/app/pages/data-catalogue/data-catalogue.component.ts b/src/app/pages/data-catalogue/data-catalogue.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..2a41c6fb3f39020f61ce6b32969d2e4f376f720a --- /dev/null +++ b/src/app/pages/data-catalogue/data-catalogue.component.ts @@ -0,0 +1,16 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'ngx-data-catalogue', + template: ` + <router-outlet></router-outlet> + `, +}) +export class DataCatalogueComponent implements OnInit { + + constructor() { } + + ngOnInit(): void { + } + +} diff --git a/src/app/pages/data-catalogue/data-catalogue.module.ts b/src/app/pages/data-catalogue/data-catalogue.module.ts new file mode 100644 index 0000000000000000000000000000000000000000..97283a3c0ee218f7e25dadddf9ddda3ddae6913b --- /dev/null +++ b/src/app/pages/data-catalogue/data-catalogue.module.ts @@ -0,0 +1,17 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; + +import { DataCatalogueRoutingModule } from './data-catalogue-routing.module'; +import { SearchComponent } from './search/search.component'; +import { DatasetComponent } from './dataset/dataset.component'; +import { DataCatalogueComponent } from './data-catalogue.component'; + + +@NgModule({ + declarations: [DataCatalogueComponent, SearchComponent, DatasetComponent], + imports: [ + CommonModule, + DataCatalogueRoutingModule + ] +}) +export class DataCatalogueModule { } diff --git a/src/app/pages/data-catalogue/dataset/dataset.component.html b/src/app/pages/data-catalogue/dataset/dataset.component.html new file mode 100644 index 0000000000000000000000000000000000000000..c2bf737f153195cc8e20261bfec69f4af7c79d59 --- /dev/null +++ b/src/app/pages/data-catalogue/dataset/dataset.component.html @@ -0,0 +1 @@ +<p>dataset works!</p> diff --git a/src/app/pages/data-catalogue/dataset/dataset.component.scss b/src/app/pages/data-catalogue/dataset/dataset.component.scss new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/src/app/pages/data-catalogue/dataset/dataset.component.spec.ts b/src/app/pages/data-catalogue/dataset/dataset.component.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..13950bc3f906626bebb24e173ab9d29ee5c50866 --- /dev/null +++ b/src/app/pages/data-catalogue/dataset/dataset.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { DatasetComponent } from './dataset.component'; + +describe('DatasetComponent', () => { + let component: DatasetComponent; + let fixture: ComponentFixture<DatasetComponent>; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ DatasetComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(DatasetComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/pages/data-catalogue/dataset/dataset.component.ts b/src/app/pages/data-catalogue/dataset/dataset.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..6eb42df092a8d8ea072c2f23fbaa82e149bd8778 --- /dev/null +++ b/src/app/pages/data-catalogue/dataset/dataset.component.ts @@ -0,0 +1,15 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'ngx-dataset', + templateUrl: './dataset.component.html', + styleUrls: ['./dataset.component.scss'] +}) +export class DatasetComponent implements OnInit { + + constructor() { } + + ngOnInit(): void { + } + +} diff --git a/src/app/pages/data-catalogue/model/datalet.ts b/src/app/pages/data-catalogue/model/datalet.ts new file mode 100644 index 0000000000000000000000000000000000000000..0653b7e257ead9822876e42567a45ca59d657851 --- /dev/null +++ b/src/app/pages/data-catalogue/model/datalet.ts @@ -0,0 +1,14 @@ +export class Datalet { + id?: string; + nodeID?: string; + datasetID?: string; + distributionID?: string; + datalet_html?: string; + title?: string; + customTitle?: boolean; + registerDate?: string; + lastSeenDate?: string; + views?: number; + + constructor(){} +} \ No newline at end of file diff --git a/src/app/pages/data-catalogue/model/dcatapformat.enum.ts b/src/app/pages/data-catalogue/model/dcatapformat.enum.ts new file mode 100644 index 0000000000000000000000000000000000000000..39dfb93eb951d3263129956a26fec5234e848de7 --- /dev/null +++ b/src/app/pages/data-catalogue/model/dcatapformat.enum.ts @@ -0,0 +1,9 @@ +export enum DCATAPFormat { + IDRA = "IDRA", + TURTLE = "TURTLE", + NTRIPLES = "NTRIPLES", + RDFXML = "RDF/XML", + N3 = "N3", + RDFJSON = "RDF/JSON", + JSONLD = "JSON-LD", +} \ No newline at end of file diff --git a/src/app/pages/data-catalogue/model/dcatdataset.ts b/src/app/pages/data-catalogue/model/dcatdataset.ts new file mode 100644 index 0000000000000000000000000000000000000000..716770791ca5bdf98263147a0b5cd6250561ffcc --- /dev/null +++ b/src/app/pages/data-catalogue/model/dcatdataset.ts @@ -0,0 +1,45 @@ +import { DCATDistribution } from "./dcatdistribution"; +import { DCTLocation } from "./dctlocation"; +import { DCTPeriodOfTime } from "./dctperiod-of-time"; +import { DCTStandard } from "./dctstandard"; +import { FOAFAgent } from "./foafagent"; +import { SKOSConcept } from "./skosconcept"; +import { VCardOrganization } from "./vcard-organization"; + +export class DCATDataset { + id: string; + nodeID: string; + title: string; + description: string; + distributions?: DCATDistribution[]; + theme?: SKOSConcept[]; + publisher?: FOAFAgent; + contactPoint?: VCardOrganization[]; + keywords?: string[]; + accessRights?: string; + conformsTo?: DCTStandard[]; + documentation?: string[]; + frequency?: string; + hasVersion?: string[]; + isVersionOf?: string[]; + landingPage?: string; + language?: string[]; + provenance?: string[]; + releaseDate?: string; + updateDate?: string; + identifier: string; + otherIdentifier?: string[]; + sample?: string[]; + source?: string[]; + spatialCoverage?: DCTLocation; + temporalCoverage?: DCTPeriodOfTime; + type?: string; + version?: string; + versionNodes?: string[]; + rightsHolder?: FOAFAgent; + creator?: FOAFAgent; + subject?: SKOSConcept[]; + legacyIdentifier?: string; + + constructor(){} +} \ No newline at end of file diff --git a/src/app/pages/data-catalogue/model/dcatdistribution.ts b/src/app/pages/data-catalogue/model/dcatdistribution.ts new file mode 100644 index 0000000000000000000000000000000000000000..faaa0aff125306444752b8ecdedac40122d2bec6 --- /dev/null +++ b/src/app/pages/data-catalogue/model/dcatdistribution.ts @@ -0,0 +1,29 @@ +import { DCTLicenseDocument } from "./dctlicense-document"; +import { DCTStandard } from "./dctstandard"; +import { SKOSConcept } from "./skosconcept"; +import { SPDXChecksum } from "./spdxchecksum"; + +export class DCATDistribution { + id: string; + storedRDF?: boolean; + nodeID: string; + accessURL: string; + description?: string; + format?: string; + license?: DCTLicenseDocument; + byteSize?: string; + checksum?: SPDXChecksum; + documentation?: string[]; + downloadURL?: string; + language?: string[]; + linkedSchemas?: DCTStandard[]; + mediaType?: string; + releaseDate?: string; + updateDate?: string; + rights?: string; + status?: SKOSConcept; + title?: string; + hasDatalets?: boolean; + + constructor(){} +} \ No newline at end of file diff --git a/src/app/pages/data-catalogue/model/dctlicense-document.ts b/src/app/pages/data-catalogue/model/dctlicense-document.ts new file mode 100644 index 0000000000000000000000000000000000000000..611397ea3de275201937e9c4326b48a4a70c941d --- /dev/null +++ b/src/app/pages/data-catalogue/model/dctlicense-document.ts @@ -0,0 +1,10 @@ +export class DCTLicenseDocument { + id?: string; + nodeID?: string; + uri?: string; + name?: string; + type?: string; + versionInfo?: string; + + constructor(){} +} \ No newline at end of file diff --git a/src/app/pages/data-catalogue/model/dctlocation.ts b/src/app/pages/data-catalogue/model/dctlocation.ts new file mode 100644 index 0000000000000000000000000000000000000000..17ab03930eb4428b92dd4c864672c03511c2db07 --- /dev/null +++ b/src/app/pages/data-catalogue/model/dctlocation.ts @@ -0,0 +1,10 @@ +export class DCTLocation { + id?: string; + nodeID?: string; + uri?: string; + geographicalIdentifier?: string; + geographicalName?: string; + geometry?: string; + + constructor(){} +} \ No newline at end of file diff --git a/src/app/pages/data-catalogue/model/dctperiod-of-time.ts b/src/app/pages/data-catalogue/model/dctperiod-of-time.ts new file mode 100644 index 0000000000000000000000000000000000000000..cb4176f8b5e7295ac2136bb33147248d0d2ba97e --- /dev/null +++ b/src/app/pages/data-catalogue/model/dctperiod-of-time.ts @@ -0,0 +1,9 @@ +export class DCTPeriodOfTime { + id?: string; + nodeID?: string; + uri?: string; + startDate?: string; + endDate?: string; + + constructor(){} +} \ No newline at end of file diff --git a/src/app/pages/data-catalogue/model/dctstandard.ts b/src/app/pages/data-catalogue/model/dctstandard.ts new file mode 100644 index 0000000000000000000000000000000000000000..6f2a46aeb6bdc9b582c211cde5ea92d1d21c590e --- /dev/null +++ b/src/app/pages/data-catalogue/model/dctstandard.ts @@ -0,0 +1,10 @@ +export class DCTStandard { + id?: string; + nodeID?: string; + identifier?: string; + title?: string; + description?: string; + referenceDocumentation?: string[]; + + constructor(){} +} \ No newline at end of file diff --git a/src/app/pages/data-catalogue/model/error-response.ts b/src/app/pages/data-catalogue/model/error-response.ts new file mode 100644 index 0000000000000000000000000000000000000000..d771f4f5b1a8cddf3b096ee8aebb41faf358eb1a --- /dev/null +++ b/src/app/pages/data-catalogue/model/error-response.ts @@ -0,0 +1,8 @@ +export class ErrorResponse { + statusCode: string; + technicalMessage: string; + errorCode: string; + userMessage?: string; + + constructor() { } +} \ No newline at end of file diff --git a/src/app/pages/data-catalogue/model/euro-voc-language.ts b/src/app/pages/data-catalogue/model/euro-voc-language.ts new file mode 100644 index 0000000000000000000000000000000000000000..013df9aebd08b46817987194b47f6a97c765f57f --- /dev/null +++ b/src/app/pages/data-catalogue/model/euro-voc-language.ts @@ -0,0 +1,32 @@ +export class EuroVocLanguage { + languageName?: + | "BG" + | "ES" + | "CS" + | "DA" + | "DE" + | "ET" + | "EL" + | "EN" + | "FR" + | "GA" + | "HR" + | "IT" + | "LV" + | "LT" + | "HU" + | "MT" + | "NL" + | "PL" + | "PT" + | "RO" + | "SK" + | "SL" + | "FI" + | "SV" + | "MK" + | "SQ" + | "SR"; + + constructor(){} +} \ No newline at end of file diff --git a/src/app/pages/data-catalogue/model/foafagent.ts b/src/app/pages/data-catalogue/model/foafagent.ts new file mode 100644 index 0000000000000000000000000000000000000000..04301d0a07097051cc4e82853a12e955a2666781 --- /dev/null +++ b/src/app/pages/data-catalogue/model/foafagent.ts @@ -0,0 +1,13 @@ +export class FOAFAgent { + id?: string; + name: string; + resourceUri?: string; + propertyUri?: string; + mbox?: string; + homepage?: string; + type?: string; + identifier?: string; + nodeID: string; + + constructor(){} +} \ No newline at end of file diff --git a/src/app/pages/data-catalogue/model/odmscatalogue-image.ts b/src/app/pages/data-catalogue/model/odmscatalogue-image.ts new file mode 100644 index 0000000000000000000000000000000000000000..923c652f8e93c4ee5d875ce3a3d7b3eef333fc10 --- /dev/null +++ b/src/app/pages/data-catalogue/model/odmscatalogue-image.ts @@ -0,0 +1,6 @@ +export class ODMSCatalogueImage { + imageId?: number; + imageData?: string; + + constructor(){} +} \ No newline at end of file diff --git a/src/app/pages/data-catalogue/model/odmscatalogue-info.ts b/src/app/pages/data-catalogue/model/odmscatalogue-info.ts new file mode 100644 index 0000000000000000000000000000000000000000..bffc5c3300c01efd2cd00940b5026d20cfc20cf0 --- /dev/null +++ b/src/app/pages/data-catalogue/model/odmscatalogue-info.ts @@ -0,0 +1,7 @@ +export class ODMSCatalogueInfo { + id?: number; + name?: string; + federationLevel?: any; + + constructor(){} +} \ No newline at end of file diff --git a/src/app/pages/data-catalogue/model/odmscatalogue-response.ts b/src/app/pages/data-catalogue/model/odmscatalogue-response.ts new file mode 100644 index 0000000000000000000000000000000000000000..579d16dcfe4bfcd52b81f1f9872aef9dfac99485 --- /dev/null +++ b/src/app/pages/data-catalogue/model/odmscatalogue-response.ts @@ -0,0 +1,8 @@ +import { ODMSCatalogue } from "./odmscatalogue"; + +export class ODMSCatalogueResponse { + count:number; + catalogues:Array<ODMSCatalogue>=[]; + + constructor(){} +} diff --git a/src/app/pages/data-catalogue/model/odmscatalogue-type.enum.ts b/src/app/pages/data-catalogue/model/odmscatalogue-type.enum.ts new file mode 100644 index 0000000000000000000000000000000000000000..2a8296abf86f5b18dc7c505b9295f75839243b3d --- /dev/null +++ b/src/app/pages/data-catalogue/model/odmscatalogue-type.enum.ts @@ -0,0 +1,10 @@ +export enum ODMSCatalogueType { + CKAN = "CKAN", + SOCRATA = "SOCRATA", + NATIVE = "NATIVE", + WEB = "WEB", + DCATDUMP = "DCATDUMP", + DKAN = "DKAN", + ORION = "ORION", + SPARQL = "SPARQL", +} diff --git a/src/app/pages/data-catalogue/model/odmscatalogue.ts b/src/app/pages/data-catalogue/model/odmscatalogue.ts new file mode 100644 index 0000000000000000000000000000000000000000..1b92a5e1842c7db41fdfedacb073bc58ddd2fc36 --- /dev/null +++ b/src/app/pages/data-catalogue/model/odmscatalogue.ts @@ -0,0 +1,25 @@ +import { ODMSCatalogueImage } from "./odmscatalogue-image"; +import { ODMSCatalogueType } from "./odmscatalogue-type.enum"; + + +export class ODMSCatalogue { + id?: string; + name: string; + host: string; + nodeType: ODMSCatalogueType; + publisherName?: string; + publisherUrl?: string; + publisherEmail?: string; + datasetCount?: number; + registerDate?: string; + lastUpdateDate?: string; + description?: string; + image?: ODMSCatalogueImage; + location?: string; + locationDescription?: string; + isActive?: boolean; + country?: string; + category?: string; + + constructor() { } +} \ No newline at end of file diff --git a/src/app/pages/data-catalogue/model/search-date-filter.ts b/src/app/pages/data-catalogue/model/search-date-filter.ts new file mode 100644 index 0000000000000000000000000000000000000000..46770fe9877c5a750dd3f27028f1f0e7ceaa3596 --- /dev/null +++ b/src/app/pages/data-catalogue/model/search-date-filter.ts @@ -0,0 +1,6 @@ +export class SearchDateFilter { + start: string; + end: string; + + constructor(){} +} \ No newline at end of file diff --git a/src/app/pages/data-catalogue/model/search-euro-voc-filter.ts b/src/app/pages/data-catalogue/model/search-euro-voc-filter.ts new file mode 100644 index 0000000000000000000000000000000000000000..d40295191832412c0bdc802928fd4652433bf45f --- /dev/null +++ b/src/app/pages/data-catalogue/model/search-euro-voc-filter.ts @@ -0,0 +1,9 @@ +import { EuroVocLanguage } from "./euro-voc-language"; + +export class SearchEuroVocFilter { + euroVoc?: boolean=false; + sourceLanguage?: EuroVocLanguage; + targetLanguages?: EuroVocLanguage[]; + + constructor() { } +} diff --git a/src/app/pages/data-catalogue/model/search-facet.ts b/src/app/pages/data-catalogue/model/search-facet.ts new file mode 100644 index 0000000000000000000000000000000000000000..4fdf351624046f7caafd472a1e6e7738a1a1df27 --- /dev/null +++ b/src/app/pages/data-catalogue/model/search-facet.ts @@ -0,0 +1,7 @@ +export class SearchFacet { + facet?: string; + keyword?: string; + search_value?: string; + + constructor(){} +} \ No newline at end of file diff --git a/src/app/pages/data-catalogue/model/search-facets-list.ts b/src/app/pages/data-catalogue/model/search-facets-list.ts new file mode 100644 index 0000000000000000000000000000000000000000..78ad7b486cd74684adac75bba7f8655bc6d8b9ba --- /dev/null +++ b/src/app/pages/data-catalogue/model/search-facets-list.ts @@ -0,0 +1,9 @@ +import { SearchFacet } from "./search-facet"; + +export class SearchFacetsList { + displayName?: string; + search_parameter?: string; + values?: SearchFacet[]; + + constructor(){} +} \ No newline at end of file diff --git a/src/app/pages/data-catalogue/model/search-filter.ts b/src/app/pages/data-catalogue/model/search-filter.ts new file mode 100644 index 0000000000000000000000000000000000000000..c370c764f133a5787c6fa8f9dcc7e55cd721ac6a --- /dev/null +++ b/src/app/pages/data-catalogue/model/search-filter.ts @@ -0,0 +1,6 @@ +export class SearchFilter { + field: string='ALL'; + value: string=""; + + constructor(){} +} \ No newline at end of file diff --git a/src/app/pages/data-catalogue/model/search-request.ts b/src/app/pages/data-catalogue/model/search-request.ts new file mode 100644 index 0000000000000000000000000000000000000000..96cba928b36b6c937b0314e14866bd3c2624bb49 --- /dev/null +++ b/src/app/pages/data-catalogue/model/search-request.ts @@ -0,0 +1,18 @@ +import { SearchDateFilter } from "./search-date-filter"; +import { SearchEuroVocFilter } from "./search-euro-voc-filter"; +import { SearchFilter } from "./search-filter"; +import { SortOption } from "./sort-option"; + +export class SearchRequest { + filters: Array<SearchFilter>=[new SearchFilter()]; + releaseDate?: SearchDateFilter; + updateDate?: SearchDateFilter; + live: boolean = false; + euroVocFilter: SearchEuroVocFilter=new SearchEuroVocFilter(); + sort: SortOption=new SortOption(); + rows: string='10'; + start: string='0'; + nodes?: number[]=[]; + + constructor(){} +} \ No newline at end of file diff --git a/src/app/pages/data-catalogue/model/search-result.ts b/src/app/pages/data-catalogue/model/search-result.ts new file mode 100644 index 0000000000000000000000000000000000000000..65b9b6baaf738f5a3eae3ebea5b0b204728a4541 --- /dev/null +++ b/src/app/pages/data-catalogue/model/search-result.ts @@ -0,0 +1,10 @@ +import { DCATDataset } from "./dcatdataset"; +import { SearchFacetsList } from "./search-facets-list"; + +export class SearchResult { + count?: number; + results?: DCATDataset[]; + facets?: SearchFacetsList[]; + + constructor(){} +} \ No newline at end of file diff --git a/src/app/pages/data-catalogue/model/skosconcept.ts b/src/app/pages/data-catalogue/model/skosconcept.ts new file mode 100644 index 0000000000000000000000000000000000000000..5304b034b14d2820b53eeaaa20053b923c87ab8e --- /dev/null +++ b/src/app/pages/data-catalogue/model/skosconcept.ts @@ -0,0 +1,11 @@ +import { SKOSPrefLabel } from "./skospref-label"; + +export class SKOSConcept { + id?: string; + nodeID?: string; + resourceUri?: string; + propertyUri?: string; + prefLabel?: SKOSPrefLabel[]; + + constructor(){} +} \ No newline at end of file diff --git a/src/app/pages/data-catalogue/model/skospref-label.ts b/src/app/pages/data-catalogue/model/skospref-label.ts new file mode 100644 index 0000000000000000000000000000000000000000..859f70268924e5eac4ff933f94bbff3ce3955e3d --- /dev/null +++ b/src/app/pages/data-catalogue/model/skospref-label.ts @@ -0,0 +1,8 @@ +export class SKOSPrefLabel { + id?: string; + nodeID?: string; + language?: string; + value?: string; + + constructor(){} +} \ No newline at end of file diff --git a/src/app/pages/data-catalogue/model/sort-mode.enum.ts b/src/app/pages/data-catalogue/model/sort-mode.enum.ts new file mode 100644 index 0000000000000000000000000000000000000000..c6dac86c87a14f912dad93ebdf28969e0f60bc25 --- /dev/null +++ b/src/app/pages/data-catalogue/model/sort-mode.enum.ts @@ -0,0 +1,4 @@ +export enum SortMode { + Asc = "asc", + Desc = "desc", +} \ No newline at end of file diff --git a/src/app/pages/data-catalogue/model/sort-option.ts b/src/app/pages/data-catalogue/model/sort-option.ts new file mode 100644 index 0000000000000000000000000000000000000000..bc02f38ac4b867462cbd51d81d8e10450656b59a --- /dev/null +++ b/src/app/pages/data-catalogue/model/sort-option.ts @@ -0,0 +1,8 @@ +import { SortMode } from "./sort-mode.enum"; + +export class SortOption { + field?: string = 'id'; + mode?: SortMode = SortMode.Asc; + + constructor(){} +} \ No newline at end of file diff --git a/src/app/pages/data-catalogue/model/spdxchecksum.ts b/src/app/pages/data-catalogue/model/spdxchecksum.ts new file mode 100644 index 0000000000000000000000000000000000000000..fc46e0410095936021e2c371e273c96319b731d3 --- /dev/null +++ b/src/app/pages/data-catalogue/model/spdxchecksum.ts @@ -0,0 +1,9 @@ +export class SPDXChecksum { + id?: string; + nodeID?: string; + uri?: string; + algorithm?: string; + checksumValue?: string; + + constructor(){} +} \ No newline at end of file diff --git a/src/app/pages/data-catalogue/model/vcard-organization.ts b/src/app/pages/data-catalogue/model/vcard-organization.ts new file mode 100644 index 0000000000000000000000000000000000000000..6b4f163508c342f8f0c9c09402fce58c31af4af8 --- /dev/null +++ b/src/app/pages/data-catalogue/model/vcard-organization.ts @@ -0,0 +1,12 @@ +export class VCardOrganization { + id?: string; + resourceUri?: string; + propertyUri?: string; + fn: string; + nodeID: string; + hasEmail?: string; + hasTelephoneValue?: string; + hasTelephoneType?: string; + + constructor(){} +} \ No newline at end of file diff --git a/src/app/pages/data-catalogue/search/search.component.html b/src/app/pages/data-catalogue/search/search.component.html new file mode 100644 index 0000000000000000000000000000000000000000..33d92602f359bca6e6502241bed995603eb76429 --- /dev/null +++ b/src/app/pages/data-catalogue/search/search.component.html @@ -0,0 +1,3 @@ +<p>search works!</p> + +<p>{{searchResponse.count}}</p> diff --git a/src/app/pages/data-catalogue/search/search.component.scss b/src/app/pages/data-catalogue/search/search.component.scss new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/src/app/pages/data-catalogue/search/search.component.spec.ts b/src/app/pages/data-catalogue/search/search.component.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..918ce70713eb80531d0a415880fe94ec265bee9c --- /dev/null +++ b/src/app/pages/data-catalogue/search/search.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { SearchComponent } from './search.component'; + +describe('SearchComponent', () => { + let component: SearchComponent; + let fixture: ComponentFixture<SearchComponent>; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ SearchComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(SearchComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/pages/data-catalogue/search/search.component.ts b/src/app/pages/data-catalogue/search/search.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..c9353c53b9e6f2e6cad0696b5277ff1879a9ba6f --- /dev/null +++ b/src/app/pages/data-catalogue/search/search.component.ts @@ -0,0 +1,26 @@ +import { Component, OnInit } from '@angular/core'; +import { SearchRequest } from '../model/search-request'; +import { SearchResult } from '../model/search-result'; +import { RestAPIService } from '../services/rest-api.service'; + +@Component({ + selector: 'ngx-search', + templateUrl: './search.component.html', + styleUrls: ['./search.component.scss'] +}) +export class SearchComponent implements OnInit { + + + searchResponse:SearchResult=new SearchResult(); + searchRequest:SearchRequest=new SearchRequest(); + + constructor(private restApi:RestAPIService) { } + + ngOnInit(): void { + this.restApi.getCataloguesInfo().subscribe(infos =>{ + this.searchRequest.nodes = infos.map(x=>x.id) + this.restApi.searchDatasets(this.searchRequest).subscribe(res=>this.searchResponse=res); + }) + } + +} diff --git a/src/app/pages/data-catalogue/services/rest-api.service.spec.ts b/src/app/pages/data-catalogue/services/rest-api.service.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..f0977dbec712c0c3c60d924871c334bd7744069e --- /dev/null +++ b/src/app/pages/data-catalogue/services/rest-api.service.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing'; + +import { RestAPIService } from './rest-api.service'; + +describe('RestAPIService', () => { + let service: RestAPIService; + + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(RestAPIService); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); +}); diff --git a/src/app/pages/data-catalogue/services/rest-api.service.ts b/src/app/pages/data-catalogue/services/rest-api.service.ts new file mode 100644 index 0000000000000000000000000000000000000000..7c0310c31c8c61185c63bc45d5e4596931a4ce83 --- /dev/null +++ b/src/app/pages/data-catalogue/services/rest-api.service.ts @@ -0,0 +1,51 @@ +import { HttpClient } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { ConfigService } from '@ngx-config/core'; +import { Observable } from 'rxjs'; +import { DCATDataset } from '../model/dcatdataset'; +import { ODMSCatalogue } from '../model/odmscatalogue'; +import { ODMSCatalogueInfo } from '../model/odmscatalogue-info'; +import { ODMSCatalogueResponse } from '../model/odmscatalogue-response'; +import { SearchRequest } from '../model/search-request'; +import { SearchResult } from '../model/search-result'; + +@Injectable({ + providedIn: 'root' +}) +export class RestAPIService { + + private apiEndpoint; + + constructor(private config:ConfigService,private http:HttpClient) { + this.apiEndpoint=this.config.getSettings("idra_base_url"); + } + + getDatasetById(id:string):Observable<DCATDataset>{ + return this.http.get<DCATDataset>(`${this.apiEndpoint}/Idra/api/v1/client/datasets/${id}`); + } + + + getDataset(catalogueId:number, id:string):Observable<DCATDataset>{ + return this.http.get<DCATDataset>(`${this.apiEndpoint}/Idra/api/v1/client/catalogues/${catalogueId}/datasets/${id}`); + } + + getDatasets(catalogueId:number):Observable<Array<DCATDataset>>{ + return this.http.get<Array<DCATDataset>>(`${this.apiEndpoint}/Idra/api/v1/client/catalogues/${catalogueId}/datasets`); + } + + getCatalogue(catalogueId:number):Observable<ODMSCatalogue>{ + return this.http.get<ODMSCatalogue>(`${this.apiEndpoint}/Idra/api/v1/client/catalogues/${catalogueId}`); + } + + getCatalogues(/*Use the default server query parameter*/):Observable<ODMSCatalogueResponse>{ + return this.http.get<ODMSCatalogueResponse>(`${this.apiEndpoint}/Idra/api/v1/client/catalogues`); + } + + getCataloguesInfo():Observable<Array<ODMSCatalogueInfo>>{ + return this.http.get<Array<ODMSCatalogueInfo>>(`${this.apiEndpoint}/Idra/api/v1/client/cataloguesInfo`); + } + + searchDatasets(parameters:SearchRequest):Observable<SearchResult>{ + return this.http.post<SearchResult>(`${this.apiEndpoint}/Idra/api/v1/client/search`,parameters); + } +} diff --git a/src/app/pages/pages-menu.ts b/src/app/pages/pages-menu.ts index 2e1deeac14c12069e21663f274b7028d7332c622..7f3fd087b2e121b92cb1d59e4471e74fed6b2183 100644 --- a/src/app/pages/pages-menu.ts +++ b/src/app/pages/pages-menu.ts @@ -13,6 +13,14 @@ export const MENU_ITEMS: NbMenuItem[] = [ name:"home" } }, + { + title: 'Data Catalogue', + icon: 'home-outline', + link: "/pages/catalogues", + data:{ + name:"catalogues" + } + }, { title: 'Maps', icon: 'map-outline', diff --git a/src/app/pages/pages-routing.module.ts b/src/app/pages/pages-routing.module.ts index 2afc117e381f7e3fcb98d6294031ac4e6581f7f6..41ab757b4ee4a8d940eb978b18fef905199e602f 100644 --- a/src/app/pages/pages-routing.module.ts +++ b/src/app/pages/pages-routing.module.ts @@ -39,6 +39,11 @@ const routes: Routes = [{ loadChildren: () => import('./charts/charts.module') .then(m => m.ChartsModule), }, + { + path: 'catalogues', + loadChildren: () => import('./data-catalogue/data-catalogue.module') + .then(m => m.DataCatalogueModule), + }, { path: '', redirectTo: 'home', diff --git a/src/app/pages/pages.module.ts b/src/app/pages/pages.module.ts index c5ec9b81a0e80c411b8442be06fc511fb26a00c7..5f6869b1964d5d757b863e19edf1db6cb365451a 100644 --- a/src/app/pages/pages.module.ts +++ b/src/app/pages/pages.module.ts @@ -14,7 +14,7 @@ import { MiscellaneousModule } from './miscellaneous/miscellaneous.module'; MiscellaneousModule, ], declarations: [ - PagesComponent, + PagesComponent ], }) export class PagesModule { diff --git a/src/assets/config.json b/src/assets/config.json index c0eff0f62dcb3966078decf3d14b722b06762d14..a81ecb0ec3ae74d93dfc43fee4df900b1b1c34b1 100644 --- a/src/assets/config.json +++ b/src/assets/config.json @@ -1,9 +1,10 @@ { "authProfile": "oidc", - "idmBaseURL":"http://localhost:8080/auth/realms/urbanite/protocol/openid-connect", + "idmBaseURL":"http://192.168.99.103:8080/auth/realms/urbanite/protocol/openid-connect", "dashboardBaseURL":"http://localhost:4200", - "client_id":"my-client", + "client_id":"urbanite", "client_secret": "", + "idra_base_url":"http://localhost:8080", "external-application-cards":[ { "url": "http://217.172.12.141:8080",