Blame view

bower_components/JSDataChecker/src/ODPlatforms/CKAN.js 4.68 KB
2b9ef0b0   Renato De Donato   JSDarkSide
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
  /*
   ** This file is part of JSDataChecker.
   **
   ** JSDataChecker is free software: you can redistribute it and/or modify
   ** it under the terms of the GNU General Public License as published by
   ** the Free Software Foundation, either version 3 of the License, or
   ** (at your option) any later version.
   **
   ** JSDataChecker is distributed in the hope that it will be useful,
   ** but WITHOUT ANY WARRANTY; without even the implied warranty of
   ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   ** GNU General Public License for more details.
   **
   ** You should have received a copy of the GNU General Public License
   ** along with JSDataChecker. If not, see <http://www.gnu.org/licenses/>.
   **
   ** Copyright (C) 2016 JSDataChecker - Donato Pirozzi (donatopirozzi@gmail.com)
   ** Distributed under the GNU GPL v3. For full terms see the file LICENSE.
   ** License: http://www.gnu.org/licenses/gpl.html GPL version 3 or higher
   **/
  
  
  //This JS class allows the connection to a ckan platform.
  
  function CKANApi() {
  }//EndFunction.
  
  CKANApi.prototype = (function() {
  
      var httpGetAsync = function(theUrl, callback, errorCallback) {
          var xhttp = new XMLHttpRequest();
          xhttp.onreadystatechange = function() {
              if (xhttp.readyState == 4 && xhttp.status == 200)
                  callback(xhttp.responseText);
          };
          xhttp.onerror = function (XMLHttpRequest, textStatus, errorThrown) {
              console.log( 'The data failed to load :(' );
              if (typeof errorCallback !== 'undefined')
                  errorCallback("Check DataStoreAPI.");
          };
          xhttp.open("GET", theUrl, true);//true for asynchronous.
          xhttp.send(null);
      };//EndFunction.
  
      /*var _processListOfDataset = function(requestContent) {
  
          var jsonContent = JSON.parse(requestContent);
          if (jsonContent.success == false) return;
          var ckanresults = jsonContent.result.results;
  
  
          var datasetsCSV = [];
          var arrFormatsSummary = [];
  
          for (var i=0; i<ckanresults.length; i++) {
              var result = ckanresults[i];
              var resources = result.resources;
              for (var j=0; j<resources.length; j++) {
                  var resource = resources[j];
  
                  var resourceFormat = resource.format;
                  _arrUtil.testAndIncrement(arrFormatsSummary, resourceFormat);
  
                  if (resourceFormat == "CSV")
                      datasetsCSV.push({ id: resource.id, description: resource.description, url: resource.url });
  
                  //debugger;
              }
          }//EndFor.
  
          console.log("...");
      };//EndFunction.*/
  
      var _retrieveListOfDatasets = function(baseUrl, userCallback) {
          httpGetAsync(baseUrl, function(responseText) {
              var datasets = [];
  
              var jsonResponse = JSON.parse(responseText);
              var jsonResults = jsonResponse.result.results;
  
              for (var i=0; i<jsonResults.length; i++) {
                  var jsonResult = jsonResults[i];
                  var jsonResources = jsonResult.resources;
  
                  for (var j=0; j<jsonResources.length; j++) {
                      var jsonResource = jsonResources[j];
  
                      var idx = baseUrl.indexOf("/api");
                      var pageUrl = baseUrl.substring(0, idx) + "/dataset/" + jsonResult.name + "/resource/" + jsonResource.id;
                      datasets.push({ id: jsonResource.id, name: jsonResource.name, format: jsonResource.format,
                          url: jsonResource.url, pageUrl: pageUrl });
                  }//EndForJ.
              }//EndForI.
  
              userCallback(datasets);
          });
      };//EndFunction.
  
      //PUBLIC CLASS CONTENT.
      return {
          constructor: CKANApi,
  
          listDatasets: function (baseUrl, userCallback) {
              var apiListDataset = baseUrl + "/api/3/action/package_search" + "?rows=10000";
              _retrieveListOfDatasets(apiListDataset, userCallback)
          },//EndFunction.
  
          retrieveDataset: function (baseUrl, datasetId, userCallback) {
              var linkDataset = baseUrl + "/api/action/datastore_search?resource_id=" + datasetId;
              httpGetAsync(linkDataset, function(responseContent) {
                  var jsonResponseCKAN = JSON.parse(responseContent);
                  var numOfRows = jsonResponseCKAN.result.total;
                  var numOfCols = jsonResponseCKAN.result.fields.length;
                  var record = { error: false, original: jsonResponseCKAN, numOfRows: numOfRows, numOfCols: numOfCols };
                  userCallback(record);
              }, function (errMsg) {
                  var record = { error: true, errorMessage: errMsg };
                  userCallback(record);
              });
          }//EndFunction
      };
  
  })();