This commit is contained in:
Michele Artini 2022-06-21 09:55:39 +02:00
parent 3905cf3c3f
commit 45673b832c
4 changed files with 54 additions and 10 deletions

View File

@ -23,11 +23,13 @@ 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;
import eu.dnetlib.common.controller.AbstractDnetController;
import eu.dnetlib.is.vocabulary.model.Vocabulary;
import eu.dnetlib.is.vocabulary.model.VocabularyTerm;
import eu.dnetlib.is.vocabulary.model.VocabularyTermPK;
import eu.dnetlib.is.vocabulary.repository.VocabularyRepository;
import eu.dnetlib.is.vocabulary.repository.VocabularyTermRepository;
@ -52,8 +54,8 @@ public class VocabularyRestController extends AbstractDnetController {
}
@GetMapping("/{vocabulary}")
public Iterable<VocabularyTerm> listVocs(@PathVariable final String vocabulary) {
return vocabularyTermRepository.findByVocabularyOrderByCode(vocabulary);
public Vocabulary getVoc(@PathVariable final String vocabulary) {
return vocabularyRepository.getById(vocabulary);
}
@DeleteMapping("/{vocabulary}")
@ -110,4 +112,25 @@ public class VocabularyRestController extends AbstractDnetController {
return voc;
}
@GetMapping("/{vocabulary}/terms")
public Iterable<VocabularyTerm> listTerms(@PathVariable final String vocabulary) {
return vocabularyTermRepository.findByVocabularyOrderByCode(vocabulary);
}
@PostMapping("/{vocabulary}/terms")
public Iterable<VocabularyTerm> saveTerm(@PathVariable final String vocabulary, @RequestParam final VocabularyTerm term) {
term.setVocabulary(vocabulary);
vocabularyTermRepository.save(term);
return vocabularyTermRepository.findByVocabularyOrderByCode(vocabulary);
}
@DeleteMapping("/{vocabulary}/terms/{termId}")
public Iterable<VocabularyTerm> listTerms(@PathVariable final String vocabulary, @PathVariable final String term) {
final VocabularyTermPK pk = new VocabularyTermPK();
pk.setCode(term);
pk.setVocabulary(vocabulary);
vocabularyTermRepository.deleteById(pk);
return vocabularyTermRepository.findByVocabularyOrderByCode(vocabulary);
}
}

View File

@ -1,15 +1,28 @@
package eu.dnetlib.is.vocabulary;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import eu.dnetlib.is.vocabulary.model.Vocabulary;
import eu.dnetlib.is.vocabulary.repository.VocabularyRepository;
@Controller
public class VocabularyUIController {
@Autowired
private VocabularyRepository vocabularyRepository;
@GetMapping("/vocabularyEditor")
public void vocabularyEditor(@RequestParam final String id, final ModelMap map) {
map.put("vocId", id);
final Vocabulary voc = vocabularyRepository.getById(id);
map.put("vocId", voc.getId());
map.put("vocName", voc.getName());
map.put("vocDesc", voc.getDescription());
}
}

View File

@ -5,7 +5,7 @@ app.controller('vocabularyController', function($scope, $http, $location) {
$scope.vocId = vocId();
$scope.reload = function() {
$http.get('./api/vocs/'+ encodeURIComponent($scope.vocId) + '?' + $.now()).then(function successCallback(res) {
$http.get('./api/vocs/'+ encodeURIComponent($scope.vocId) + '/terms?' + $.now()).then(function successCallback(res) {
$scope.terms = res.data;
}, function errorCallback(res) {
alert('ERROR: ' + res.data.message);

View File

@ -24,32 +24,40 @@
<div class="container-fluid">
<div class="row">
<div class="col">
<h1>Information Service - Vocabulary {{vocId}}</h1>
<hr />
<h1>Information Service - Vocabulary Editor</h1>
<p>
<b>ID: </b><span th:text="${vocId}"></span><br />
<b>Name: </b><span th:text="${vocName}"></span><br />
<b>Description: </b><span th:text="${vocDesc}"></span>
</p>
<p ng-show="terms.length > 0">
<input type="text" class="form-control form-control-sm" ng-model="termFilter" placeholder="Filter..."/>
</p>
<p>
<span class="text-muted"><b>Number of terms:</b> {{(terms | filter:termFilter).length}}</span>
</p>
</p>
<table class="table table-sm table-striped">
<thead>
<tr>
<th style="width: 25%">Code</th>
<th style="width: 25%">English Name</th>
<th style="width: 25%">Native Name</th>
<th style="width: 20%">English Name</th>
<th style="width: 20%">Native Name</th>
<th style="width: 10%">Synonyms</th>
<th></th>
</tr>
</thead>
<tbody>
<tr ng-show="(terms|filter:termFilter).length == 0">
<td colspan="4" class="text-muted">no terms</td>
<td colspan="5" class="text-muted">no terms</td>
</tr>
<tr ng-repeat="t in terms|filter:termFilter">
<th>{{t.code}}</th>
<td>{{t.englishName}}</td>
<td>{{t.nativeName}}</td>
<td>{{t.synonyms.length}} synonym(s)</td>
<td align="right"><button type="button" class="btn btn-sm btn-danger" ng-click="deleteTerm(t.id)">delete</button></td>
</tr>
</tbody>