use of org.wso2.carbon.apimgt.rest.api.publisher.v1.dto.DocumentDTO in project carbon-apimgt by wso2.
the class ApisApiServiceImpl method apisApiIdDocumentsDocumentIdGet.
@Override
public Response apisApiIdDocumentsDocumentIdGet(String apiId, String documentId, String xWSO2Tenant, String ifModifiedSince, MessageContext messageContext) {
Documentation documentation;
try {
String organization = RestApiUtil.getValidatedOrganization(messageContext);
String username = RestApiCommonUtil.getLoggedInUsername();
APIConsumer apiConsumer = RestApiCommonUtil.getConsumer(username);
if (!RestAPIStoreUtils.isUserAccessAllowedForAPIByUUID(apiId, organization)) {
RestApiUtil.handleAuthorizationFailure(RestApiConstants.RESOURCE_API, apiId, log);
}
documentation = apiConsumer.getDocumentation(apiId, documentId, organization);
if (null != documentation) {
DocumentDTO documentDTO = DocumentationMappingUtil.fromDocumentationToDTO(documentation);
return Response.ok().entity(documentDTO).build();
} else {
RestApiUtil.handleResourceNotFoundError(RestApiConstants.RESOURCE_DOCUMENTATION, documentId, log);
}
} catch (APIManagementException e) {
if (RestApiUtil.isDueToResourceNotFound(e)) {
RestApiUtil.handleResourceNotFoundError(RestApiConstants.RESOURCE_API, apiId, e, log);
} else {
RestApiUtil.handleInternalServerError("Error while getting API " + apiId, e, log);
}
}
return null;
}
use of org.wso2.carbon.apimgt.rest.api.publisher.v1.dto.DocumentDTO in project carbon-apimgt by wso2.
the class DocumentationMappingUtil method fromDocumentationListToDTO.
/**
* Converts a List object of ArtifactResourceMetaData into a DTO
*
* @param documentInfoList List of ArtifactResourceMetaData
* @param limit maximum number of APIs returns
* @param offset starting index
* @return DocumentListDTO object containing Document DTOs
*/
public static DocumentListDTO fromDocumentationListToDTO(List<DocumentInfo> documentInfoList, int offset, int limit) {
DocumentListDTO documentListDTO = new DocumentListDTO();
List<DocumentDTO> documentDTOs = documentListDTO.getList();
if (documentDTOs == null) {
documentDTOs = new ArrayList<>();
documentListDTO.setList(documentDTOs);
}
// add the required range of objects to be returned
int start = offset < documentInfoList.size() && offset >= 0 ? offset : Integer.MAX_VALUE;
int end = offset + limit - 1 <= documentInfoList.size() - 1 ? offset + limit - 1 : documentInfoList.size() - 1;
for (int i = start; i <= end; i++) {
documentDTOs.add(fromDocumentationToDTO(documentInfoList.get(i)));
}
documentListDTO.setCount(documentDTOs.size());
return documentListDTO;
}
use of org.wso2.carbon.apimgt.rest.api.publisher.v1.dto.DocumentDTO in project carbon-apimgt by wso2.
the class ApisApiServiceImpl method apisApiIdDocumentsPost.
/**
* Adds new document to an API
*
* @param apiId UUID of API
* @param body DTO object including the document's meta information
* @param ifMatch If-Match header value
* @param ifUnmodifiedSince If-Unmodified-Since header value
* @param request msf4j request object
* @return newly added document meta info object
* @throws NotFoundException When the particular resource does not exist in the system
*/
@Override
public Response apisApiIdDocumentsPost(String apiId, DocumentDTO body, String ifMatch, String ifUnmodifiedSince, Request request) throws NotFoundException {
try {
String username = RestApiUtil.getLoggedInUsername(request);
APIPublisher apiProvider = RestAPIPublisherUtil.getApiPublisher(username);
DocumentInfo documentation = MappingUtil.toDocumentInfo(body);
if (body.getType() == DocumentDTO.TypeEnum.OTHER && StringUtils.isBlank(body.getOtherTypeName())) {
// check otherTypeName for not null if doc type is OTHER
RestApiUtil.handleBadRequest("otherTypeName cannot be empty if type is OTHER.", log);
}
String sourceUrl = body.getSourceUrl();
if (body.getSourceType() == DocumentDTO.SourceTypeEnum.URL && (StringUtils.isBlank(sourceUrl) || !RestApiUtil.isURL(sourceUrl))) {
RestApiUtil.handleBadRequest("Invalid document sourceUrl Format", log);
}
// this will fail if user does not have access to the API or the API does not exist
String docid = apiProvider.addDocumentationInfo(apiId, documentation);
documentation = apiProvider.getDocumentationSummary(docid);
DocumentDTO newDocumentDTO = MappingUtil.toDocumentDTO(documentation);
// Add initial inline content as empty String, if the Document type is INLINE
if (body.getSourceType() == DocumentDTO.SourceTypeEnum.INLINE) {
apiProvider.addDocumentationContent(docid, "");
if (log.isDebugEnabled()) {
log.debug("The updated source type of the document " + body.getName() + " is: " + body.getSourceType());
}
}
return Response.status(Response.Status.CREATED).entity(newDocumentDTO).build();
} catch (APIManagementException e) {
String errorMessage = "Error while create document for api " + apiId;
HashMap<String, String> paramList = new HashMap<String, String>();
paramList.put(APIMgtConstants.ExceptionsConstants.API_ID, apiId);
ErrorDTO errorDTO = RestApiUtil.getErrorDTO(e.getErrorHandler(), paramList);
log.error(errorMessage, e);
return Response.status(e.getErrorHandler().getHttpStatusCode()).entity(errorDTO).build();
}
}
use of org.wso2.carbon.apimgt.rest.api.publisher.v1.dto.DocumentDTO in project carbon-apimgt by wso2.
the class ApisApiServiceImpl method apisApiIdDocumentsDocumentIdPut.
/**
* Updates an API's document
*
* @param apiId UUID of API
* @param documentId UUID of the document
* @param body DTO object including the document's meta information
* @param ifMatch If-Match header value
* @param ifUnmodifiedSince If-Unmodified-Since header value
* @param request msf4j request object
* @return updated document meta info DTO as the response
* @throws NotFoundException When the particular resource does not exist in the system
*/
@Override
public Response apisApiIdDocumentsDocumentIdPut(String apiId, String documentId, DocumentDTO body, String ifMatch, String ifUnmodifiedSince, Request request) throws NotFoundException {
String username = RestApiUtil.getLoggedInUsername(request);
try {
APIPublisher apiPublisher = RestAPIPublisherUtil.getApiPublisher(username);
String existingFingerprint = apisApiIdDocumentsDocumentIdGetFingerprint(apiId, documentId, null, null, request);
if (!StringUtils.isEmpty(ifMatch) && !StringUtils.isEmpty(existingFingerprint) && !ifMatch.contains(existingFingerprint)) {
return Response.status(Response.Status.PRECONDITION_FAILED).build();
}
DocumentInfo documentInfoOld = apiPublisher.getDocumentationSummary(documentId);
// validation checks for existence of the document
if (documentInfoOld == null) {
String msg = "Error while getting document";
log.error(msg);
ErrorDTO errorDTO = RestApiUtil.getErrorDTO(msg, 900314L, msg);
log.error(msg);
return Response.status(Response.Status.NOT_FOUND).entity(errorDTO).build();
}
if (body.getType() == DocumentDTO.TypeEnum.OTHER && StringUtils.isBlank(body.getOtherTypeName())) {
// check otherTypeName for not null if doc type is OTHER
String msg = "otherTypeName cannot be empty if type is OTHER.";
log.error(msg);
ErrorDTO errorDTO = RestApiUtil.getErrorDTO(msg, 900313L, msg);
log.error(msg);
return Response.status(Response.Status.BAD_REQUEST).entity(errorDTO).build();
}
if (body.getSourceType() == DocumentDTO.SourceTypeEnum.URL && (StringUtils.isBlank(body.getSourceUrl()) || !RestApiUtil.isURL(body.getSourceUrl()))) {
// check otherTypeName for not null if doc type is OTHER
String msg = "Invalid document sourceUrl Format";
log.error(msg);
ErrorDTO errorDTO = RestApiUtil.getErrorDTO(msg, 900313L, msg);
log.error(msg);
return Response.status(Response.Status.BAD_REQUEST).entity(errorDTO).build();
}
// overriding some properties
body.setName(documentInfoOld.getName());
body.setDocumentId(documentInfoOld.getId());
DocumentInfo documentation = MappingUtil.toDocumentInfo(body);
// this will fail if user does not have access to the API or the API does not exist
apiPublisher.updateDocumentation(apiId, documentation);
// retrieve the updated documentation
DocumentInfo newDocumentation = apiPublisher.getDocumentationSummary(documentId);
String newFingerprint = apisApiIdDocumentsDocumentIdGetFingerprint(apiId, documentId, null, null, request);
return Response.ok().header(HttpHeaders.ETAG, "\"" + newFingerprint + "\"").entity(MappingUtil.toDocumentDTO(newDocumentation)).build();
} catch (APIManagementException e) {
String errorMessage = "Error while updating the document " + documentId + " for API : " + apiId;
log.error(errorMessage, e);
HashMap<String, String> paramList = new HashMap<String, String>();
paramList.put(APIMgtConstants.ExceptionsConstants.API_ID, apiId);
paramList.put(APIMgtConstants.ExceptionsConstants.DOC_ID, documentId);
ErrorDTO errorDTO = RestApiUtil.getErrorDTO(e.getErrorHandler(), paramList);
log.error(errorMessage, e);
return Response.status(e.getErrorHandler().getHttpStatusCode()).entity(errorDTO).build();
}
}
use of org.wso2.carbon.apimgt.rest.api.publisher.v1.dto.DocumentDTO in project carbon-apimgt by wso2.
the class ApisApiServiceImpl method apisApiIdDocumentsDocumentIdGet.
/**
* Retrives the document identified by the API's ID and the document's ID
*
* @param apiId UUID of API
* @param documentId UUID of the document
* @param ifNoneMatch If-None-Match header value
* @param ifModifiedSince If-Modified-Since header value
* @param request minor version header
* @return the document qualifying for the provided IDs
* @throws NotFoundException When the particular resource does not exist in the system
*/
@Override
public Response apisApiIdDocumentsDocumentIdGet(String apiId, String documentId, String ifNoneMatch, String ifModifiedSince, Request request) throws NotFoundException {
DocumentDTO documentDTO = null;
String username = RestApiUtil.getLoggedInUsername(request);
try {
APIStore apiStore = RestApiUtil.getConsumer(username);
String existingFingerprint = apisApiIdDocumentsDocumentIdGetFingerprint(apiId, documentId, ifNoneMatch, ifModifiedSince, request);
if (!StringUtils.isEmpty(ifNoneMatch) && !StringUtils.isEmpty(existingFingerprint) && ifNoneMatch.contains(existingFingerprint)) {
return Response.notModified().build();
}
DocumentInfo documentInfo = apiStore.getDocumentationSummary(documentId);
documentDTO = DocumentationMappingUtil.fromDocumentationToDTO(documentInfo);
return Response.ok().entity(documentDTO).header(HttpHeaders.ETAG, "\"" + existingFingerprint + "\"").build();
} catch (APIManagementException e) {
String errorMessage = "Error while retrieving documentation for given apiId " + apiId + "with docId " + documentId;
HashMap<String, String> paramList = new HashMap<String, String>();
paramList.put(APIMgtConstants.ExceptionsConstants.API_ID, apiId);
paramList.put(APIMgtConstants.ExceptionsConstants.DOC_ID, documentId);
ErrorDTO errorDTO = RestApiUtil.getErrorDTO(e.getErrorHandler(), paramList);
log.error(errorMessage, e);
return Response.status(e.getErrorHandler().getHttpStatusCode()).entity(errorDTO).build();
}
}
Aggregations