api docs
This commit is contained in:
parent
67ec5bc368
commit
781254121d
|
@ -1,16 +1,16 @@
|
||||||
package eu.dnetlib.is;
|
package eu.dnetlib.is;
|
||||||
|
|
||||||
import org.springframework.stereotype.Controller;
|
import org.springframework.stereotype.Controller;
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
|
||||||
@Controller
|
@Controller
|
||||||
public class SwaggerController {
|
public class SwaggerController {
|
||||||
|
|
||||||
@GetMapping({
|
@RequestMapping(value = {
|
||||||
"/doc", "/swagger"
|
"/docs", "swagger-ui.html", "swagger-ui/"
|
||||||
})
|
})
|
||||||
public String apiDoc() {
|
public String apiDoc() {
|
||||||
return "redirect:swagger-ui/";
|
return "redirect:swagger-ui/index.html";
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,7 +11,6 @@ import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.http.MediaType;
|
import org.springframework.http.MediaType;
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
import org.springframework.web.bind.annotation.PathVariable;
|
import org.springframework.web.bind.annotation.PathVariable;
|
||||||
import org.springframework.web.bind.annotation.RequestParam;
|
|
||||||
|
|
||||||
import eu.dnetlib.common.controller.AbstractDnetController;
|
import eu.dnetlib.common.controller.AbstractDnetController;
|
||||||
import eu.dnetlib.is.resource.model.SimpleResource;
|
import eu.dnetlib.is.resource.model.SimpleResource;
|
||||||
|
@ -23,25 +22,25 @@ public class AbstractResourceController extends AbstractDnetController {
|
||||||
@Autowired
|
@Autowired
|
||||||
protected SimpleResourceService service;
|
protected SimpleResourceService service;
|
||||||
|
|
||||||
@GetMapping("/")
|
@GetMapping("/{typeId}")
|
||||||
public List<SimpleResource> listResources(@RequestParam final String type) {
|
public List<SimpleResource> listResources(@PathVariable final String typeId) {
|
||||||
return service.listResources(type);
|
return service.listResources(typeId);
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("/{id}/metadata")
|
@GetMapping("/{resId}/metadata")
|
||||||
public SimpleResource getMetadata(@PathVariable final String id) throws InformationServiceException {
|
public SimpleResource getMetadata(@PathVariable final String resId) throws InformationServiceException {
|
||||||
return service.getMetadata(id);
|
return service.getMetadata(resId);
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("/{id}/content")
|
@GetMapping("/{resId}/content")
|
||||||
public void getContent(@PathVariable final String id, final HttpServletResponse res) throws InformationServiceException {
|
public void getContent(@PathVariable final String resId, final HttpServletResponse res) throws InformationServiceException {
|
||||||
final String ctype = service.getContentType(id);
|
final String ctype = service.getContentType(resId);
|
||||||
|
|
||||||
res.setCharacterEncoding(StandardCharsets.UTF_8.name());
|
res.setCharacterEncoding(StandardCharsets.UTF_8.name());
|
||||||
res.setContentType(ctype);
|
res.setContentType(ctype);
|
||||||
|
|
||||||
final String content =
|
final String content =
|
||||||
ctype.equals(MediaType.APPLICATION_XML_VALUE) ? XmlIndenter.indent(service.getContent(id)) : service.getContent(id);
|
ctype.equals(MediaType.APPLICATION_XML_VALUE) ? XmlIndenter.indent(service.getContent(resId)) : service.getContent(resId);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
IOUtils.write(content, res.getOutputStream(), StandardCharsets.UTF_8.name());
|
IOUtils.write(content, res.getOutputStream(), StandardCharsets.UTF_8.name());
|
||||||
|
|
|
@ -32,28 +32,28 @@ public class ResourceAjaxController extends AbstractResourceController {
|
||||||
return service.saveNewResource(name, type, description, content);
|
return service.saveNewResource(name, type, description, content);
|
||||||
}
|
}
|
||||||
|
|
||||||
@DeleteMapping("/{id}")
|
@DeleteMapping("/{resId}")
|
||||||
public void deleteResource(@PathVariable final String id) {
|
public void deleteResource(@PathVariable final String resId) {
|
||||||
service.deleteResource(id);
|
service.deleteResource(resId);
|
||||||
}
|
}
|
||||||
|
|
||||||
@PostMapping("/{id}/metadata")
|
@PostMapping("/{resId}/metadata")
|
||||||
public void saveMetadata(@PathVariable final String id, @RequestBody final SimpleResource r) throws InformationServiceException {
|
public void saveMetadata(@PathVariable final String resId, @RequestBody final SimpleResource r) throws InformationServiceException {
|
||||||
service.saveMetadata(id, r);
|
service.saveMetadata(resId, r);
|
||||||
}
|
}
|
||||||
|
|
||||||
@PostMapping("/{id}/content")
|
@PostMapping("/{resId}/content")
|
||||||
public void saveContent(@PathVariable final String id, @RequestParam final String content) throws InformationServiceException {
|
public void saveContent(@PathVariable final String resId, @RequestParam final String content) throws InformationServiceException {
|
||||||
service.saveContent(id, content);
|
service.saveContent(resId, content);
|
||||||
}
|
}
|
||||||
|
|
||||||
@PostMapping(value = "/{id}/file", consumes = {
|
@PostMapping(value = "/{resId}/file", consumes = {
|
||||||
MediaType.TEXT_PLAIN_VALUE, MediaType.APPLICATION_XML_VALUE, MediaType.APPLICATION_JSON_VALUE
|
MediaType.TEXT_PLAIN_VALUE, MediaType.APPLICATION_XML_VALUE, MediaType.APPLICATION_JSON_VALUE
|
||||||
})
|
})
|
||||||
public void uploadContent(@PathVariable final String id, final HttpServletRequest request) throws InformationServiceException {
|
public void uploadContent(@PathVariable final String resId, final HttpServletRequest request) throws InformationServiceException {
|
||||||
try {
|
try {
|
||||||
final String content = IOUtils.toString(request.getInputStream(), StandardCharsets.UTF_8);
|
final String content = IOUtils.toString(request.getInputStream(), StandardCharsets.UTF_8);
|
||||||
service.saveContent(id, content);
|
service.saveContent(resId, content);
|
||||||
} catch (final IOException e) {
|
} catch (final IOException e) {
|
||||||
throw new InformationServiceException("Error processing input file", e);
|
throw new InformationServiceException("Error processing input file", e);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,10 +1,65 @@
|
||||||
package eu.dnetlib.is.resources;
|
package eu.dnetlib.is.resources;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
import java.util.stream.StreamSupport;
|
||||||
|
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
import eu.dnetlib.is.resource.model.ResourceType;
|
||||||
|
import eu.dnetlib.is.resource.repository.ResourceTypeRepository;
|
||||||
|
|
||||||
@RestController
|
@RestController
|
||||||
@RequestMapping("/api/resources")
|
@RequestMapping("/api/resources")
|
||||||
public class ResourceApiController extends AbstractResourceController {
|
public class ResourceApiController extends AbstractResourceController {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ResourceTypeRepository resourceTypeRepository;
|
||||||
|
|
||||||
|
@GetMapping("/")
|
||||||
|
private List<SimpleResourceType> types() {
|
||||||
|
return StreamSupport.stream(resourceTypeRepository.findAll().spliterator(), false)
|
||||||
|
.filter(rt -> rt.isSimple())
|
||||||
|
.map(rt -> new SimpleResourceType(rt))
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
class SimpleResourceType {
|
||||||
|
|
||||||
|
private final String typeId;
|
||||||
|
|
||||||
|
private final String typeName;
|
||||||
|
|
||||||
|
private final String contentType;
|
||||||
|
|
||||||
|
private final long count;
|
||||||
|
|
||||||
|
public SimpleResourceType(final ResourceType rt) {
|
||||||
|
this.typeId = rt.getId();
|
||||||
|
this.typeName = rt.getName();
|
||||||
|
this.contentType = rt.getContentType();
|
||||||
|
this.count = rt.getCount();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTypeId() {
|
||||||
|
return typeId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTypeName() {
|
||||||
|
return typeName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getContentType() {
|
||||||
|
return contentType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getCount() {
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,7 +7,7 @@ app.controller('resourcesController', function($scope, $http) {
|
||||||
$scope.type = typeId();
|
$scope.type = typeId();
|
||||||
|
|
||||||
$scope.reload = function() {
|
$scope.reload = function() {
|
||||||
$http.get('./ajax/resources/?type=' + $scope.type + '&' + $.now()).then(function successCallback(res) {
|
$http.get('./ajax/resources/' + encodeURIComponent($scope.type) + '?' + $.now()).then(function successCallback(res) {
|
||||||
$scope.resources = res.data;
|
$scope.resources = res.data;
|
||||||
}, function errorCallback(res) {
|
}, function errorCallback(res) {
|
||||||
alert('ERROR: ' + res.data.message);
|
alert('ERROR: ' + res.data.message);
|
||||||
|
@ -29,7 +29,7 @@ app.controller('resourcesController', function($scope, $http) {
|
||||||
$scope.prepareEditContent = function(r) {
|
$scope.prepareEditContent = function(r) {
|
||||||
$scope.tmpRes = angular.copy(r);
|
$scope.tmpRes = angular.copy(r);
|
||||||
$scope.tmpContent = "loading...";
|
$scope.tmpContent = "loading...";
|
||||||
$http.get('./ajax/resources/' + r.id + '/content?' + $.now()).then(function successCallback(res) {
|
$http.get('./ajax/resources/' + encodeURIComponent(r.id) + '/content?' + $.now()).then(function successCallback(res) {
|
||||||
if (res.data instanceof Object) {
|
if (res.data instanceof Object) {
|
||||||
$scope.tmpContent = JSON.stringify(res.data, null, "\t");
|
$scope.tmpContent = JSON.stringify(res.data, null, "\t");
|
||||||
} else {
|
} else {
|
||||||
|
@ -57,7 +57,7 @@ app.controller('resourcesController', function($scope, $http) {
|
||||||
|
|
||||||
$scope.saveMetadata = function(id, md) {
|
$scope.saveMetadata = function(id, md) {
|
||||||
$http.defaults.headers.post["Content-Type"] = "application/json;charset=UTF-8";
|
$http.defaults.headers.post["Content-Type"] = "application/json;charset=UTF-8";
|
||||||
$http.post('./ajax/resources/' + id + '/metadata?' + $.now(), md).then(function successCallback(res) {
|
$http.post('./ajax/resources/' + encodeURIComponent(id) + '/metadata?' + $.now(), md).then(function successCallback(res) {
|
||||||
alert("Resource saved");
|
alert("Resource saved");
|
||||||
$scope.reload();
|
$scope.reload();
|
||||||
}, function errorCallback(res) {
|
}, function errorCallback(res) {
|
||||||
|
@ -67,7 +67,7 @@ app.controller('resourcesController', function($scope, $http) {
|
||||||
|
|
||||||
$scope.saveContent = function(id, content) {
|
$scope.saveContent = function(id, content) {
|
||||||
$http.defaults.headers.post["Content-Type"] = "application/x-www-form-urlencoded; charset=UTF-8";
|
$http.defaults.headers.post["Content-Type"] = "application/x-www-form-urlencoded; charset=UTF-8";
|
||||||
$http.post('./ajax/resources/' + id + '/content?' + $.now(), $.param({
|
$http.post('./ajax/resources/' + encodeURIComponent(id) + '/content?' + $.now(), $.param({
|
||||||
'content' : content
|
'content' : content
|
||||||
})).then(function successCallback(res) {
|
})).then(function successCallback(res) {
|
||||||
alert("Resource saved");
|
alert("Resource saved");
|
||||||
|
|
|
@ -59,7 +59,8 @@
|
||||||
<li class="nav-item dropdown">
|
<li class="nav-item dropdown">
|
||||||
<a class="nav-link dropdown-toggle" href="javascript:void(0)" data-toggle="dropdown">Info</a>
|
<a class="nav-link dropdown-toggle" href="javascript:void(0)" data-toggle="dropdown">Info</a>
|
||||||
<div class="dropdown-menu">
|
<div class="dropdown-menu">
|
||||||
<a class="dropdown-item" href="./info">Common Info</a>
|
<a class="dropdown-item" href="./info">Container Info</a>
|
||||||
|
<a class="dropdown-item" href="./docs" target="_blank">API documentation</a>
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
|
@ -38,7 +38,7 @@
|
||||||
</p>
|
</p>
|
||||||
<button type="button" class="btn btn-sm btn-primary" data-toggle="modal" data-target="#editMetadataModal" ng-click="prepareEditMetadata(r)">edit metadata</button>
|
<button type="button" class="btn btn-sm btn-primary" data-toggle="modal" data-target="#editMetadataModal" ng-click="prepareEditMetadata(r)">edit metadata</button>
|
||||||
<button type="button" class="btn btn-sm btn-primary" data-toggle="modal" data-target="#editContentModal" ng-click="prepareEditContent(r)">edit content</button>
|
<button type="button" class="btn btn-sm btn-primary" data-toggle="modal" data-target="#editContentModal" ng-click="prepareEditContent(r)">edit content</button>
|
||||||
<a href="./ajax/resources/{{r.id}}/content" class="btn btn-sm btn-success" target="_blank">raw content</a>
|
<a href="./api/resources/{{r.id}}/content" class="btn btn-sm btn-success" target="_blank">raw content</a>
|
||||||
<button type="button" class="btn btn-sm btn-danger" ng-click="deleteResource(r)">delete</button>
|
<button type="button" class="btn btn-sm btn-danger" ng-click="deleteResource(r)">delete</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
Loading…
Reference in New Issue