import {Component, Input, Output, EventEmitter} from '@angular/core'; import { ActivatedRoute } from '@angular/router'; import {SearchCrossrefService} from '../claim-utils/service/searchCrossref.service'; import {SearchOrcidService} from '../claim-utils/service/searchOrcid.service'; import {SearchPublicationsService} from '../../services/searchPublications.service'; import { SearchDataciteService } from '../claim-utils/service/searchDatacite.service'; import {SearchDatasetsService} from '../../services/searchDatasets.service'; import {SearchSoftwareService} from '../../services/searchSoftware.service'; import { ErrorCodes} from '../../utils/properties/errorCodes'; import {ClaimResult} from '../claim-utils/claimEntities.class'; import{DOI} from '../../utils/string-utils.class'; import{EnvProperties} from '../../utils/properties/env-properties'; declare var UIkit:any; @Component({ selector: 'claim-result-search-form', templateUrl: 'claimResultSearchForm.component.html', }) export class ClaimResultSearchFormComponent { constructor (private _searchDataciteService: SearchDataciteService, private _searchDatasetsService:SearchDatasetsService, private _searchSoftwareService:SearchSoftwareService, private _searchCrossrefService: SearchCrossrefService,private _searchOrcidService: SearchOrcidService, private _searchPublicationsService: SearchPublicationsService, private route: ActivatedRoute) { var myDate = new Date(); this.todayDate = myDate.getFullYear()+ "-" +(myDate.getMonth() + 1) + "-" + myDate.getDate() ; this.nextDate = (myDate.getFullYear()+100)+ "-" +(myDate.getMonth() + 1) + "-" + myDate.getDate() ; } ngOnInit() { console.log("Init of ClaimResultSearchFormComponent"); console.log(this.properties); if(this.keyword !=null && this.keyword.length > 0){ this.search(false); } } page : number = 1; size:number = 5; navigateTo: string = "Search"; source: string = "datacite"; type : string = "dataset"; showSearchResults:boolean=false; // searchType ="publication"; @Input() public select:boolean = true ; @Input() public keyword:string = ''; @Input() public selectedResults:ClaimResult[]; @Input() public properties:EnvProperties; // @Output() datasetsChange = new EventEmitter(); // @Output() publicationsChange = new EventEmitter(); // @Output() resultsChange = new EventEmitter(); public errorCodes:ErrorCodes = new ErrorCodes(); dataciteResults=[]; dataciteResultsNum:number = null; // dataciteResultsNum : Observable = null; dataciteStatus = this.errorCodes.NONE; datacitePage : number = 1; openaireData=[]; openaireDataNum:number = 0 ; openaireDataStatus = this.errorCodes.NONE; openaireDataPage : number = 1; openaireSoftware=[]; openaireSoftwareNum:number = 0 ; openaireSoftwareStatus = this.errorCodes.NONE; openaireSoftwarePage : number = 1; public warningMessage = ""; public infoMessage = ""; public todayDate = ''; public nextDate = ''; public DOIs:string[] = []; sub: any; public searchSource:string = "openaire" public activeTab:string = "openairePub" crossrefResults=[]; crossrefResultsNum : number = null; crossrefPage : number = 1; crossrefStatus:number = this.errorCodes.NONE; openairePubs = []; openairePubsNum: number ; openairePubsPage : number = 1; openairePubsStatus:number = this.errorCodes.NONE; orcidResults: string[]; orcidResultsNum: number ; totalPages: number; orcidResultsToShow: string[]; orcidPage : number = 1; orcidStatus:number = this.errorCodes.NONE; authorId: string; selectAuthorId: string = "0"; authorGivenName: string; authorFamilyName: string; authorIds: string[]; authorGivenNames: string[]; authorFamilyNames: string[]; authorsNum : number ; reloadOpenaire:boolean = true; reloadCrossref:boolean = false; reloadDatacite:boolean = false; reloadOrcid:boolean = false; search(sourceChanged){ this.warningMessage = ""; this.infoMessage = ""; if(!sourceChanged){ this.DOIs = DOI.getDOIsFromString(this.keyword); this.reloadOpenaire = true; this.reloadCrossref = true; this.reloadDatacite = true; this.reloadOrcid = true; } if((this.searchSource == "all" || this.searchSource == "openaire") && this.reloadOpenaire){ this.searchOpenairePubs(this.keyword, this.size, 1); this.searchOpenaireData(this.keyword,this.size,1); this.searchOpenaireSoftware(this.keyword,this.size,1); this.reloadOpenaire = false; } if((this.searchSource == "all" || this.searchSource == "crossref")&&this.reloadCrossref){ this.getCrossrefResults(this.keyword, this.size,1); this.reloadCrossref = false; } if((this.searchSource == "all" || this.searchSource == "datacite")&& this.reloadDatacite){ this.searchDatacite(this.keyword,this.size,1); this.reloadDatacite = false; } if((this.searchSource == "all" || this.searchSource == "orcid")&& this.reloadOrcid){ this.searchOrcid(this.keyword); this.reloadOrcid = false; } this.showSearchResults = true; } private getCrossrefResults (term: string, size : number, page : number) { this.crossrefStatus = this.errorCodes.LOADING; if( this.DOIs.length > 0 ){ this._searchCrossrefService.searchCrossrefByDOIs(this.DOIs, this.properties.searchCrossrefAPIURL).subscribe( data => { if(data != null) { this.crossrefResults = data.items; this.crossrefPage=page; this.crossrefResultsNum = data['total-results']; if(data.items == 0){ this._searchCrossrefService.searchCrossrefResults(term, size, page, this.properties.searchCrossrefAPIURL).subscribe( data => { if(data != null) { this.crossrefResults = data.items; this.crossrefPage=page; this.crossrefResultsNum = data['total-results']; this.crossrefStatus = this.errorCodes.DONE; }else{ this.crossrefStatus = this.errorCodes.ERROR; } }, err =>{ console.log(err.status); this.crossrefStatus = this.errorCodes.ERROR; } ); }else{ this.crossrefStatus = this.errorCodes.DONE; } } }, err => { //console.log(err); this._searchCrossrefService.searchCrossrefResults(term, size, page, this.properties.searchCrossrefAPIURL).subscribe( data => { this.crossrefResults = data.items; this.crossrefPage=page; this.crossrefResultsNum = data['total-results']; this.crossrefStatus = this.errorCodes.DONE; }, err => { console.log(err.status); this.crossrefStatus = this.errorCodes.ERROR; } ); } ); }else{ this._searchCrossrefService.searchCrossrefResults(term, size, page, this.properties.searchCrossrefAPIURL).subscribe( data => { if(data != null) { this.crossrefResults = data.items; this.crossrefPage=page; this.crossrefResultsNum = data['total-results']; this.crossrefStatus = this.errorCodes.DONE; }else{ this.crossrefStatus = this.errorCodes.ERROR; } }, err => { console.log(err.status); this.crossrefStatus = this.errorCodes.ERROR; } ); } } private searchOpenairePubs(term: string, size : number, page : number) { if(this.DOIs.length > 0 ){ this.openairePubsStatus = this.errorCodes.LOADING; this._searchPublicationsService.searchPublicationsByDois(this.DOIs, null, page, size, [], this.properties).subscribe( data => { if(data != null) { this.openairePubsPage=page; this.openairePubsNum = data[0]; this.openairePubs = data[1]; this.openairePubsStatus = this.errorCodes.DONE; if(this.openairePubsNum == 0){ this.openairePubsStatus = this.errorCodes.NONE; } }else { this.openairePubsStatus = this.errorCodes.ERROR; } }, err => { this.openairePubsStatus = this.errorCodes.ERROR; console.log(err.status); } ); }else{ this.openairePubsStatus = this.errorCodes.LOADING; this._searchPublicationsService.searchPublications('q='+term, null, page, size, [], this.properties).subscribe( data => { if(data != null) { this.openairePubsPage=page; this.openairePubsNum = data[0]; this.openairePubs = data[1]; this.openairePubsStatus = this.errorCodes.DONE; if(this.openairePubsNum == 0){ this.openairePubsStatus = this.errorCodes.NONE; } }else { this.openairePubsStatus = this.errorCodes.ERROR; } }, err => { this.openairePubsStatus = this.errorCodes.ERROR; console.log(err.status); } ); } } private searchOrcid (term: string) { if(this.DOIs.length > 0){ this.orcidStatus = this.errorCodes.NONE; return; } this.orcidStatus = this.errorCodes.LOADING; this.authorIds = new Array(); this.authorGivenNames = new Array(); this.authorFamilyNames = new Array(); this.getOrcidAuthor(term); console.info('searchOrcid in searchOrcid file'); } private readData(data: any) { this.authorIds.push(data[2].path); if(data[0] != null) { this.authorGivenNames.push(data[0].value); } else { this.authorGivenNames.push(""); } if(data[1] != null) { this.authorFamilyNames.push(data[1].value); } else { this.authorFamilyNames.push(""); } } private getOrcidAuthor (term: string) { this.orcidResultsNum = null; //passing structures in order to fill them in service this._searchOrcidService.searchOrcidAuthor(term, this.authorIds, this.authorGivenNames, this.authorFamilyNames, this.properties).subscribe( data => { if(data != null && data == true) { this.getOrcidResultsByIndex(0); } this.orcidStatus = this.errorCodes.NONE; }, err => this.errorHandler(err, term) ); } private errorHandler(err: any, term: string) { if(err.status == 404){ this.getOrcidAuthors(term); } else { this.orcidStatus = this.errorCodes.ERROR; console.log(err.status); } } private getOrcidAuthors (term: string) { this.orcidResultsNum = null; this.selectAuthorId = "0"; this.orcidStatus = this.errorCodes.LOADING; //passing structures in order to fill them in service this._searchOrcidService.searchOrcidAuthors(term, this.authorIds, this.authorGivenNames, this.authorFamilyNames, this.properties).subscribe( data => { if(data != null && data == true) { this.getOrcidResultsByIndex(0); }else{ this.orcidStatus = this.errorCodes.ERROR; } }, err => { this.orcidStatus = this.errorCodes.ERROR; console.log(err.status); } ); } private getOrcidResultsByIndex (index:number) { if(this.authorIds.length > index) { this.orcidStatus = this.errorCodes.LOADING; let id = this.authorIds[index]; this.authorGivenName = this.authorGivenNames[index]; this.authorFamilyName = this.authorFamilyNames[index]; this.getOrcidResultsById(id); } } private getOrcidResultsById (id:string) { if(id=="0"){ return; } var index = this.authorIds.indexOf(id); this.authorGivenName = this.authorGivenNames[index]; this.authorFamilyName = this.authorFamilyNames[index]; this.authorId = id; console.info("getOrcidResultsById: "+id); this.orcidStatus = this.errorCodes.LOADING; this._searchOrcidService.searchOrcidPublications(id, this.properties).subscribe( data => { if(data != null) { this.orcidResults=data['orcid-work']; this.orcidResultsNum = data['orcid-work'].length; this.orcidPage = 1; if((this.orcidResultsNum % this.size) == 0){ this.totalPages=parseInt(''+(this.orcidResultsNum/this.size)); } else{ this.totalPages=parseInt(''+(this.orcidResultsNum/this.size+1)); } this.orcidResultsToShow = this.orcidResults.slice(0,10); this.orcidStatus = this.errorCodes.DONE; if(this.orcidResultsNum == 0){ this.orcidStatus = this.errorCodes.NONE; } } else { this.orcidResultsNum = 0; this.totalPages=0; this.orcidStatus = this.errorCodes.NONE; } }, err => { console.log(err.status); this.orcidStatus = this.errorCodes.ERROR; } ); } /* Is it USED??? private remove(item){ this.warningMessage = ""; this.infoMessage = ""; var index:number =this.selectedResults.indexOf(item); item.selected=false; if (index > -1) { this.selectedResults.splice(index, 1); // this.publicationsChange.emit({ // value: this.selectedResults // }); } }*/ private crossrefPageChange($event) { this.crossrefPage=$event.value; this.crossrefResults=[]; console.log("Crossref chaenged "+this.crossrefPage); this.getCrossrefResults(this.keyword,this.size,this.crossrefPage); } private orcidPageChange($event) { this.orcidPage=$event.value; this.orcidResultsToShow=[]; this.orcidResultsToShow = this.orcidResults.slice(($event.value-1)*this.size, $event.value*this.size); } private openairePubsPageChange($event) { this.openairePubsPage=$event.value; this.searchOpenairePubs(this.keyword,this.size,this.openairePubsPage); } datacitePageChange($event) { this.datacitePage=$event.value; this.dataciteResults=[]; this.searchDatacite(this.keyword,10,this.datacitePage); this.warningMessage = ""; this.infoMessage = ""; } openaireDataPageChange($event) { this.openaireDataPage=$event.value; this.openaireData=[]; this.searchOpenaireData(this.keyword,10,this.openaireDataPage); this.warningMessage = ""; this.infoMessage = ""; } openaireSoftwarePageChange($event) { this.openaireSoftwarePage=$event.value; this.openaireSoftware=[]; this.searchOpenaireSoftware(this.keyword,10,this.openaireSoftwarePage); this.warningMessage = ""; this.infoMessage = ""; } private isSelected(id:string){ var found:boolean = false; this.warningMessage = ""; for (var _i = 0; _i < this.selectedResults.length; _i++) { let item = this.selectedResults[_i]; if(item.id == id){ found=true; this.warningMessage = "Publication already in selected list"; } } return found; } // isSelected(id:string){ // // var found:boolean = false; // this.warningMessage = ""; // for (var _i = 0; _i < this.selectedResults.length; _i++) { // let item = this.selectedResults[_i]; // if(item.id == id){ // found=true; // break; // } // } // return found; // } private searchDatacite (term: string, size : number, page : number) { this.getDataciteResults(term,size,page); this.warningMessage = ""; this.infoMessage = ""; } private searchOpenaireData (term: string, size : number, page : number) { if(this.DOIs.length > 0 ){ this.openaireDataStatus = this.errorCodes.LOADING; this._searchDatasetsService.searchDatasetsByDois(this.DOIs, null, page, size, [], this.properties).subscribe( data => { if(data != null) { this.openaireDataPage=page; this.openaireDataNum = data[0]; this.openaireData = data[1]; this.openaireDataStatus = this.errorCodes.DONE; if(this.openaireDataNum == 0){ this.openaireDataStatus = this.errorCodes.NONE; } } }, err => { this.openaireDataStatus = this.errorCodes.ERROR; console.log(err.status); } ); }else{ this._searchDatasetsService.searchDatasets('q='+term+'', null, page, size, [], this.properties).subscribe( data => { if(data != null) { this.openaireDataPage=page; this.openaireDataNum = data[0]; this.openaireData = data[1]; this.openaireDataStatus = this.errorCodes.DONE; if(this.openaireDataNum == 0){ this.openaireDataStatus = this.errorCodes.NONE; } } }, err => { this.openaireDataStatus = this.errorCodes.ERROR; console.log(err.status); } ); } this.warningMessage = ""; this.infoMessage = ""; } private searchOpenaireSoftware (term: string, size : number, page : number) { if(this.DOIs.length > 0 ){ this.openaireSoftwareStatus = this.errorCodes.LOADING; this._searchSoftwareService.searchSoftwareByDois(this.DOIs, null, page, size, [], this.properties).subscribe( data => { if(data != null) { this.openaireSoftwarePage=page; this.openaireSoftwareNum = data[0]; this.openaireSoftware = data[1]; this.openaireSoftwareStatus = this.errorCodes.DONE; if(this.openaireSoftwareNum == 0){ this.openaireSoftwareStatus = this.errorCodes.NONE; } } }, err => { this.openaireSoftwareStatus = this.errorCodes.ERROR; console.log(err.status); } ); }else{ this._searchSoftwareService.searchSoftware('q='+term+'', null, page, size, [], this.properties).subscribe( data => { if(data != null) { this.openaireSoftwarePage=page; this.openaireSoftwareNum = data[0]; this.openaireSoftware = data[1]; this.openaireSoftwareStatus = this.errorCodes.DONE; if(this.openaireSoftwareNum == 0){ this.openaireSoftwareStatus = this.errorCodes.NONE; } } }, err => { this.openaireSoftwareStatus = this.errorCodes.ERROR; console.log(err.status); } ); } this.warningMessage = ""; this.infoMessage = ""; } private getDataciteResults (term: string, size : number, page : number) { console.log("getDataciteResults + "+this.properties.searchDataciteAPIURL) this._searchDataciteService.searchDataciteResults(term, size, page, this.properties).subscribe( data => { this.dataciteResults = data.data; this.datacitePage=page; this.dataciteResultsNum = data.meta.total; this.dataciteStatus = this.errorCodes.DONE; }, err => { this.dataciteStatus = this.errorCodes.ERROR; console.log(err); } ); } add(item, itemId,itemSource,itemType, itemUrl, itemTitle, date, accessmode){ console.log(' adding ' + itemType + " From " + itemSource+" "+ itemTitle); var result: ClaimResult = ClaimResult.generateResult(item, itemId,itemSource,itemType, itemUrl, itemTitle, date, accessmode); if (itemSource == 'orcid'){ if(result.authors.length ==0 ){ result.authors.push(this.authorGivenName + ', '+ this.authorFamilyName); } } var found:boolean = this.isSelected( result.id); this.warningMessage = ""; if (!found) { this.selectedResults.push(result); UIkit.notification({ message : 'A new research result is selected.', status : 'primary', timeout : 1000, pos : 'top-center' }); }else{ this.warningMessage = "Research Data already in selected list"; UIkit.notification({ message : 'The research result is already on your list.', status : 'warning', timeout : 1000, pos : 'top-center' }); } } public searchSourceChanged(source){ this.searchSource = source; this.activeTab = (source == "openaire" || source == "all")?"openairePub":source; if(this.keyword && this.keyword.length > 0){ this.search(true); } } public clickTab(tab){ this.activeTab = tab; } }