add api page (mock)

This commit is contained in:
Michele Artini 2022-12-20 13:37:40 +01:00
parent b44cb9e852
commit d54ae4ac64
6 changed files with 107 additions and 3 deletions

View File

@ -16,6 +16,7 @@ import eu.dnetlib.data.is.context.repository.ContextRepository;
import eu.dnetlib.data.is.resource.model.ResourceType;
import eu.dnetlib.data.is.resource.repository.ResourceTypeRepository;
import eu.dnetlib.data.is.vocabulary.repository.VocabularyRepository;
import eu.dnetlib.data.is.vocabulary.repository.VocabularyTermRepository;
import eu.dnetlib.is.info.KeyValue;
import eu.dnetlib.is.wfs.WfHistoryAjaxController;
import eu.dnetlib.openaire.dsm.utils.DsmBrowsableFields;
@ -29,6 +30,9 @@ public class MainController {
@Autowired
private VocabularyRepository vocabularyRepository;
@Autowired
private VocabularyTermRepository vocabularyTermRepository;
@Autowired
private ResourceTypeRepository resourceTypeRepository;
@ -41,6 +45,9 @@ public class MainController {
map.addAttribute("browsableFields", Arrays.stream(DsmBrowsableFields.values())
.map(f -> new KeyValue(f.name(), f.desc))
.collect(Collectors.toList()));
map.addAttribute("protocols", vocabularyTermRepository.findTermsByVocabulary("dnet:protocols"));
map.addAttribute("compatibilityLevels", vocabularyTermRepository.findTermsByVocabulary("dnet:compatibilityLevel"));
map.addAttribute("contentDescTypes", vocabularyTermRepository.findTermsByVocabulary("dnet:content_description_typologies"));
}
@GetMapping("/resources")

View File

@ -6,6 +6,8 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@ -47,4 +49,9 @@ public class DsmAjaxController extends AbstractDnetController {
return dsmService.findApi(id);
}
@PostMapping("/api")
public Api saveApi(@RequestBody final Api api) throws DsmException {
throw new DsmException("TO BE IMPLEMENTED");
}
}

View File

@ -0,0 +1,60 @@
<div class="container-fluid">
<div class="row mt-5">
<div class="col">
<form>
<div class="form-group row">
<label class="col-sm-2 col-form-label col-form-label-sm">Datasource</label>
<div class="col-sm-10">
<input type="text" readonly class="form-control-plaintext form-control-sm" ng-model="dsName"/>
</div>
</div>
<div class="form-group row">
<label class="col-sm-2 col-form-label col-form-label-sm">API Id</label>
<div class="col-sm-10">
<div class="input-group input-group-sm">
<div class="input-group-prepend">
<span class="input-group-text">{{prefix}}</span>
</div>
<input type="text" class="form-control" ng-model="api.id" />
</div>
</div>
</div>
<div class="form-group row">
<label class="col-sm-2 col-form-label col-form-label-sm">Compatibility level</label>
<div class="col-sm-10">
<select class="custom-select custom-select-sm" ng-model="api.compliance">
<option ng-repeat="v in compatibilityLevels">{{v}}</option>
</select>
</div>
</div>
<div class="form-group row">
<label class="col-sm-2 col-form-label col-form-label-sm">Content description</label>
<div class="col-sm-10">
<select class="custom-select custom-select-sm" ng-model="api.contentdescription">
<option ng-repeat="v in contentDescTypes">{{v}}</option>
</select>
</div>
</div>
<div class="form-group row">
<label class="col-sm-2 col-form-label col-form-label-sm">Protocol</label>
<div class="col-sm-10">
<select class="custom-select custom-select-sm" ng-model="api.protocol">
<option ng-repeat="v in protocols">{{v}}</option>
</select>
</div>
</div>
<div class="form-group row">
<label class="col-sm-2 col-form-label col-form-label-sm">BaseURL</label>
<div class="col-sm-10">
<input type="text" class="form-control form-control-sm" ng-model="api.baseUrl"/>
</div>
</div>
</form>
{{api}}
</div>
</div>
</div>

View File

@ -49,7 +49,7 @@
<td>
<span ng-repeat="o in r.organizations">
{{o.name}}
<img src="common/images/flags/{{o.country}}.gif" title="{{o.country}}" alt="" ng-if="o.country"/>
<img ng-src="common/images/flags/{{o.country}}.gif" title="{{o.country}}" alt="" ng-if="o.country"/>
<br />
</span>
</td>
@ -65,6 +65,8 @@
<span class="badge badge-success" ng-if="a.active">active</span><span class="badge badge-danger" ng-if="!a.active">not active</span>
<span ng-if="a.aggrDate"><br/><b>Last aggregation:</b> {{a.aggrDate}} <b>(total: {{a.aggrTotal}})</b></span>
</div>
<a class="btn btn-primary btn-sm mt-2" href="#!/add/api?dsId={{r.id}}&amp;dsName={{r.name}}">add api</a>
</td>
</tr><tr ng-if="r.consenttermsofuse">
<th>Consent Terms of Use</th>

View File

@ -17,6 +17,9 @@
/*<![CDATA[*/
function browsableFields() { return /*[[${browsableFields}]]*/ ''; }
function pageSize() { return /*[[${pageSize}]]*/ ''; }
function protocols() { return /*[[${protocols}]]*/ ''; }
function compatibilityLevels() { return /*[[${compatibilityLevels}]]*/ ''; }
function contentDescTypes() { return /*[[${contentDescTypes}]]*/ ''; }
/*]]>*/
</script>
@ -25,10 +28,11 @@
app.config(['$routeProvider', function($routeProvider) {
$routeProvider
.when('/search', { templateUrl: 'dsm/search.html', controller: 'dsmSearchController' })
.when('/search', { templateUrl: 'dsm/search.html', controller: 'dsmSearchController' })
.when('/results/:page/:size', { templateUrl: 'dsm/results.html', controller: 'dsmResultsController' })
.when('/results/:field/:page/:size', { templateUrl: 'dsm/results.html', controller: 'dsmResultsController' })
.when('/api', { templateUrl: 'dsm/api.html', controller: 'dsmApiController' })
.when('/add/api', { templateUrl: 'dsm/addApi.html', controller: 'dsmAddApiController' })
.when('/api', { templateUrl: 'dsm/api.html', controller: 'dsmApiController' })
.otherwise({ redirectTo: '/search' });
}
]);
@ -107,6 +111,27 @@
});
app.controller('dsmAddApiController', function($scope, $http, $location, $timeout, $routeParams) {
$scope.dsName = $routeParams.dsName;
$scope.prefix = 'api_________::' + $routeParams.dsId + '::';
$scope.api = {}
$scope.protocols = protocols();
$scope.compatibilityLevels = compatibilityLevels();
$scope.contentDescTypes = contentDescTypes();
$scope.save = function() {
var record = angular.copy($scope.api);
record.id = $scope.prefix + record.id;
record.datasource = $routeParams.dsId;
json_http_post($http, './ajax/dsm/api', record, function(res) {
$scope.api = res.data;
});
}
});
</script>
</html>

View File

@ -1,6 +1,7 @@
package eu.dnetlib.data.is.vocabulary.repository;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import eu.dnetlib.data.is.vocabulary.model.VocabularyTerm;
import eu.dnetlib.data.is.vocabulary.model.VocabularyTermPK;
@ -9,4 +10,6 @@ public interface VocabularyTermRepository extends JpaRepository<VocabularyTerm,
Iterable<VocabularyTerm> findByVocabularyOrderByCode(String vocabulary);
@Query(value = "SELECT vt.code FROM VocabularyTerm vt WHERE vt.vocabulary like ?1 ORDER BY vt.code")
Iterable<String> findTermsByVocabulary(String vocabulary);
}