use of org.wso2.carbon.apimgt.core.models.DocumentInfo in project carbon-apimgt by wso2.
the class ApisApiServiceImpl method apisApiIdDocumentsDocumentIdContentGet.
/**
* Retrieves the content of a particular document
*
* @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 msf4j request object
* @return Content of the document
* @throws NotFoundException When the particular resource does not exist in the system
*/
@Override
public Response apisApiIdDocumentsDocumentIdContentGet(String apiId, String documentId, String ifNoneMatch, String ifModifiedSince, Request request) throws NotFoundException {
String username = RestApiUtil.getLoggedInUsername(request);
try {
APIPublisher apiPublisher = RestAPIPublisherUtil.getApiPublisher(username);
String existingFingerprint = apisApiIdDocumentsDocumentIdContentGetFingerprint(apiId, documentId, ifNoneMatch, ifModifiedSince, request);
if (!StringUtils.isEmpty(ifNoneMatch) && !StringUtils.isEmpty(existingFingerprint) && ifNoneMatch.contains(existingFingerprint)) {
return Response.notModified().build();
}
DocumentContent documentationContent = apiPublisher.getDocumentationContent(documentId);
DocumentInfo documentInfo = documentationContent.getDocumentInfo();
if (DocumentInfo.SourceType.FILE.equals(documentInfo.getSourceType())) {
String filename = documentInfo.getFileName();
return Response.ok(documentationContent.getFileContent()).header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_OCTET_STREAM_TYPE).header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + filename + "\"").header(HttpHeaders.ETAG, "\"" + existingFingerprint + "\"").build();
} else if (DocumentInfo.SourceType.INLINE.equals(documentInfo.getSourceType())) {
String content = documentationContent.getInlineContent();
return Response.ok(content).header(RestApiConstants.HEADER_CONTENT_TYPE, MediaType.TEXT_PLAIN).header(HttpHeaders.ETAG, "\"" + existingFingerprint + "\"").build();
} else if (DocumentInfo.SourceType.URL.equals(documentInfo.getSourceType())) {
String sourceUrl = documentInfo.getSourceURL();
return Response.seeOther(new URI(sourceUrl)).header(HttpHeaders.ETAG, "\"" + existingFingerprint + "\"").build();
}
} catch (APIManagementException e) {
String errorMessage = "Error while retrieving document " + documentId + " of the 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();
} catch (URISyntaxException e) {
String errorMessage = "Error while retrieving source URI location of " + documentId;
ErrorDTO errorDTO = RestApiUtil.getErrorDTO(errorMessage, 900313L, errorMessage);
log.error(errorMessage, e);
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(errorDTO).build();
}
return null;
}
use of org.wso2.carbon.apimgt.core.models.DocumentInfo in project carbon-apimgt by wso2.
the class ApisApiServiceImplTestCase method testApisApiIdDocumentsDocumentIdContentGet.
@Test
public void testApisApiIdDocumentsDocumentIdContentGet() throws APIManagementException, NotFoundException {
printTestMethodName();
String apiId = UUID.randomUUID().toString();
ApisApiServiceImpl apisApiService = new ApisApiServiceImpl();
APIStore apiStore = Mockito.mock(APIStoreImpl.class);
PowerMockito.mockStatic(RestApiUtil.class);
PowerMockito.when(RestApiUtil.getConsumer(USER)).thenReturn(apiStore);
Request request = getRequest();
PowerMockito.when(RestApiUtil.getLoggedInUsername(request)).thenReturn(USER);
String documentIdFile = UUID.randomUUID().toString();
String documentIdInline = UUID.randomUUID().toString();
DocumentInfo documentInfoFile = TestUtil.createAPIDoc(documentIdFile, "documentInfoFile", "", "API1 documentation file", DocumentInfo.DocType.HOWTO, "other type", DocumentInfo.SourceType.FILE, "", DocumentInfo.Visibility.PRIVATE);
DocumentInfo documentInfoInline = TestUtil.createAPIDoc(documentIdInline, "documentInfoInline", "", "API1 documentation inline", DocumentInfo.DocType.HOWTO, "other type", DocumentInfo.SourceType.INLINE, "", DocumentInfo.Visibility.PRIVATE);
DocumentContent documentContentFIle = TestUtil.createDocContent(documentInfoFile, "Sample inline content for API1 DOC 1", null);
DocumentContent documentContentInline = TestUtil.createDocContent(documentInfoInline, "Sample inline content for API1 DOC 2", null);
Mockito.when(apiStore.getDocumentationContent(documentIdFile)).thenReturn(documentContentFIle);
Mockito.when(apiStore.getDocumentationContent(documentIdInline)).thenReturn(documentContentInline);
Response responseFile = apisApiService.apisApiIdDocumentsDocumentIdContentGet(apiId, documentIdFile, null, null, request);
Response responseInline = apisApiService.apisApiIdDocumentsDocumentIdContentGet(apiId, documentIdInline, null, null, request);
Assert.assertEquals(200, responseFile.getStatus());
Assert.assertEquals(200, responseInline.getStatus());
}
use of org.wso2.carbon.apimgt.core.models.DocumentInfo in project carbon-apimgt by wso2.
the class DocumentationMappingUtil method fromDocumentationToDTO.
/**
* Converts an ArtifactResourceMetaData object into corresponding REST API Document DTO object
*
* @param documentInfo DocumentInfo object
* @return a new DocumentDTO object corresponding to given ArtifactResourceMetaData object
*/
public static DocumentDTO fromDocumentationToDTO(DocumentInfo documentInfo) {
DocumentDTO documentDTO = new DocumentDTO();
documentDTO.setDocumentId(documentInfo.getId());
documentDTO.setName(documentInfo.getName());
documentDTO.setSummary(documentInfo.getSummary());
documentDTO.setType(DocumentDTO.TypeEnum.valueOf(documentInfo.getType().toString()));
documentDTO.setOtherTypeName(documentInfo.getOtherType());
documentDTO.setSourceType(DocumentDTO.SourceTypeEnum.valueOf(documentInfo.getSourceType().toString()));
documentDTO.setSourceUrl(documentInfo.getSourceURL());
return documentDTO;
}
use of org.wso2.carbon.apimgt.core.models.DocumentInfo in project carbon-apimgt by wso2.
the class ApisApiServiceImplTestCase method testApisApiIdDocumentsDocumentIdGet.
@Test
public void testApisApiIdDocumentsDocumentIdGet() throws APIManagementException, NotFoundException {
printTestMethodName();
String apiId = UUID.randomUUID().toString();
String documentId = UUID.randomUUID().toString();
ApisApiServiceImpl apisApiService = new ApisApiServiceImpl();
APIStore apiStore = Mockito.mock(APIStoreImpl.class);
PowerMockito.mockStatic(RestApiUtil.class);
PowerMockito.when(RestApiUtil.getConsumer(USER)).thenReturn(apiStore);
Request request = getRequest();
PowerMockito.when(RestApiUtil.getLoggedInUsername(request)).thenReturn(USER);
DocumentInfo documentInfoFile = TestUtil.createAPIDoc(documentId, "documentInfo", "", "API1 documentation file", DocumentInfo.DocType.HOWTO, "other type", DocumentInfo.SourceType.FILE, "", DocumentInfo.Visibility.PRIVATE);
Mockito.when(apiStore.getDocumentationSummary(documentId)).thenReturn(documentInfoFile);
Response response = apisApiService.apisApiIdDocumentsDocumentIdGet(apiId, documentId, null, null, request);
Assert.assertEquals(200, response.getStatus());
}
use of org.wso2.carbon.apimgt.core.models.DocumentInfo in project carbon-apimgt by wso2.
the class APIPublisherImpl method addDocumentationInfo.
/**
* Attach Documentation (without content) to an API
*
* @param apiId UUID of API
* @param documentInfo Document Summary
* @return UUID of document
* @throws APIManagementException if failed to add documentation
*/
@Override
public String addDocumentationInfo(String apiId, DocumentInfo documentInfo) throws APIManagementException {
try {
LocalDateTime localDateTime = LocalDateTime.now();
DocumentInfo document;
DocumentInfo.Builder docBuilder = new DocumentInfo.Builder(documentInfo);
docBuilder.createdBy(getUsername());
docBuilder.updatedBy(getUsername());
docBuilder.createdTime(localDateTime);
docBuilder.lastUpdatedTime(localDateTime);
if (StringUtils.isEmpty(docBuilder.getId())) {
docBuilder = docBuilder.id(UUID.randomUUID().toString());
}
if (documentInfo.getPermission() != null && !("").equals(documentInfo.getPermission())) {
HashMap roleNamePermissionList;
roleNamePermissionList = APIUtils.getAPIPermissionArray(documentInfo.getPermission());
docBuilder.permissionMap(roleNamePermissionList);
}
document = docBuilder.build();
if (!getApiDAO().isDocumentExist(apiId, document)) {
getApiDAO().addDocumentInfo(apiId, document);
return document.getId();
} else {
String msg = "Document already exist for the api " + apiId;
log.error(msg);
throw new APIManagementException(msg, ExceptionCodes.DOCUMENT_ALREADY_EXISTS);
}
} catch (APIMgtDAOException e) {
String errorMsg = "Unable to add documentation";
log.error(errorMsg, e);
throw new APIManagementException(errorMsg, e, e.getErrorHandler());
} catch (ParseException e) {
String errorMsg = "Unable to add documentation due to json parse error";
log.error(errorMsg, e);
throw new APIManagementException(errorMsg, e, ExceptionCodes.JSON_PARSE_ERROR);
}
}
Aggregations