Project

General

Profile

1
import { Component, OnInit } from '@angular/core';
2
import { ActivatedRoute } from '@angular/router';
3
import { AuthenticationService } from '../../services/authentication.service';
4
import { UsagestatsService } from '../../services/usagestats.service';
5
import { ReportResponse } from '../../domain/usageStatsClasses';
6
import {ar1_report_results} from "../../domain/sushilite_demo_data/AR1_ex";
7
import { FormBuilder, FormGroup } from '@angular/forms';
8

    
9
@Component({
10
  selector: 'metrics-usagestats-report-results',
11
  templateUrl: 'metrics-usagestats-report-results.component.html',
12
  styleUrls:['metrics-usagestats-report-results.component.css']
13
})
14
export class MetricsUsagestatsReportResultsComponent implements OnInit {
15

    
16
  loadingMessage: string;
17
  errorMessage: string;
18
  infoMessage: string;
19

    
20
  repoResponse: ReportResponse;
21
  coveredPeriod: string;
22
  params: URLSearchParams;
23
  page:number;
24
  pageSize:number;
25
  totalPages:number;
26
  selectedItemIndex: number;
27

    
28
  pageSizeSelect: FormGroup;
29
  chosenReport: string;
30

    
31
  constructor(private route: ActivatedRoute,
32
              private authService: AuthenticationService,
33
              private usageService: UsagestatsService,
34
              private fb: FormBuilder) {}
35

    
36
  ngOnInit() {
37
    this.page = 0;
38
    this.pageSize = 10;
39
    this.readParams();
40
    this.pageSizeSelect = this.fb.group({selectPageSize: ['']});
41
  }
42

    
43
  readParams() {
44
    this.params = new URLSearchParams();
45

    
46
    this.route.queryParams.subscribe( qparams => {
47
      this.params.append('Report', qparams['report']);
48
      this.params.append('Release', '4');
49
      this.params.append('RequestorID', this.authService.getUserEmail());
50
      this.params.append('BeginDate', qparams['beginDate']);
51
      this.params.append('EndDate', qparams['endDate']);
52
      this.params.append('RepositoryIdentifier', qparams['repoId']);
53
      this.params.append('ItemIdentifier', qparams['itemIdentifier']);
54
      this.params.append('ItemDataType', qparams['itemIdentifier']);
55
      this.params.append('Granularity', qparams['granularity']);
56
    });
57

    
58
    this.chosenReport = this.params.get('Report');
59
    this.getReportResponse();
60
  }
61

    
62
  getReportResponse() {
63
    this.errorMessage = '';
64
    this.loadingMessage = 'Loading results...';
65
    this.infoMessage = '';
66
    this.selectedItemIndex = null;
67
    this.repoResponse = null;
68

    
69
    this.usageService.getReportResponse(this.page.toString(), this.pageSize.toString(), this.params).subscribe(
70
      responseWrapper => {
71
        this.repoResponse = responseWrapper.ReportResponse;
72
      },
73
      error => {
74
        this.errorMessage = 'Failed to load the report results!';
75
        this.loadingMessage = '';
76
      },
77
      () => {
78
        this.errorMessage = '';
79
        this.loadingMessage = '';
80

    
81
        this.pageSizeSelect.get('selectPageSize').setValue(this.pageSize);
82
        this.pageSizeSelect.get('selectPageSize').updateValueAndValidity();
83

    
84
        this.totalPages = Math.ceil(
85
          +this.repoResponse.ReportDefinition.Filters
86
                  .ReportAttribute.filter(x => x['Name'] === 'ReportItemCount')[0].Value / this.pageSize);
87
        if ( this.totalPages === 0 ) {
88
          this.infoMessage = 'No results were found';
89
        }
90

    
91
        if (this.repoResponse.ReportDefinition && this.repoResponse.ReportDefinition.Filters &&
92
            this.repoResponse.ReportDefinition.Filters.ReportAttribute) {
93

    
94
          if (this.repoResponse.Report && this.repoResponse.ReportDefinition.Filters.UsageDateRange &&
95
            this.repoResponse.ReportDefinition.Filters.UsageDateRange.Begin &&
96
            this.repoResponse.ReportDefinition.Filters.UsageDateRange.End) {
97
            this.coveredPeriod = this.repoResponse.ReportDefinition.Filters.UsageDateRange.Begin + ' to ';
98
            this.coveredPeriod = this.coveredPeriod + this.repoResponse.ReportDefinition.Filters.UsageDateRange.End;
99
          } else {
100
            let defaultDatePeriod = this.repoResponse.Exception.filter(x => x['Message'] === 'Unspecified Date Arguments');
101

    
102
            this.coveredPeriod = defaultDatePeriod[0].Data.split(':')[1].trim() + ' to ';
103
            this.coveredPeriod = this.coveredPeriod + defaultDatePeriod[1].Data.split(':')[1].trim() + ' (default)';
104
          }
105

    
106
        } else {
107
          this.repoResponse = null;
108
        }
109
      }
110
    );
111

    
112
  }
113

    
114

    
115
  getPageSize(){
116
    this.pageSize = +(this.pageSizeSelect.get('selectPageSize').value);
117
    this.page = 0;
118
    this.getReportResponse();
119
  }
120

    
121
  goToNextPage(){
122
    if( (this.page+1) < this.totalPages) {
123
      this.page++;
124
      console.log(`Get me page ${this.page}!`);
125
      this.getReportResponse();
126
    }
127
  }
128

    
129
  goToPreviousPage(){
130
    if(this.page > 0) {
131
      this.page--;
132
      console.log(`Get me page ${this.page}!`);
133
      this.getReportResponse();
134
    }
135
  }
136

    
137
  displayItemPerformance(i: number) {
138
    if (this.selectedItemIndex === i) {
139
      this.selectedItemIndex = null;
140
    } else {
141
      this.selectedItemIndex = i;
142
    }
143
  }
144

    
145
  transformItem(itemIdentifiers: any[]) {
146
    /*const temp = urls.split(';');
147
    let output = '';
148
    for (let u of temp) {
149
      if (output.length > 0) {
150
        output = output + '\n';
151
      }
152
      output = output + u.replace(/\\/g,'').trim();
153
    }*/
154
    let field: string;
155
    if (this.chosenReport === 'RR1') {
156
      field = 'URL';
157
    } else {
158
      field = 'URLs';
159
    }
160
    const i = itemIdentifiers.findIndex(x => x['Type'] === field);
161
    if ( i > -1 ){
162
      const urls = itemIdentifiers[i]['Value'];
163
      return urls.split(';');
164
    }
165
    return '';
166
  }
167

    
168
  getBg(i: number) {
169
    if (i % 2 === 0) {
170
      console.log('true!');
171
      return 'background-color:white;';
172
    }
173
  }
174

    
175
}
(9-9/17)