Add java doc comments

Use try-with resource when using CloseableHttpClient
Refactor few variable and method names
feature/traccar-sync
Mohamed Rashd 2 years ago
parent daaeed52e2
commit 41a0c9118a

@ -21,6 +21,12 @@ package io.entgra.application.mgt.common.exception;
* Exception that will be thrown if any error occurs while calling identity server services .
*/
public class IdentityServerManagementException extends ApplicationManagementException {
public IdentityServerManagementException(String message, Throwable throwable) {
super(message, throwable);
setMessage(message);
}
public IdentityServerManagementException(String message) {
super(message);
setMessage(message);

@ -100,6 +100,12 @@ public interface ApplicationManager {
*/
<T> ApplicationDTO uploadReleaseArtifactIfExist(T app) throws ApplicationManagementException;
/**
* Check if public app release packageName is valid (I.E invalid if packageName already exists)
*
* @param packageName name of the application release package
* @throws ApplicationManagementException if package name is invalid
*/
void validatePublicAppReleasePackageName(String packageName) throws ApplicationManagementException;
/**
@ -169,6 +175,13 @@ public interface ApplicationManager {
*/
void deleteApplicationRelease(String releaseUuid) throws ApplicationManagementException;
/**
* Use to delete application artifact files (For example this is useful to delete application release artifacts
* (I.E screenshots) when an application is deleted)
*
* @param directoryPaths directory paths that contains release artifacts (I.E screenshots)
* @throws ApplicationManagementException if error occurred while deleting artifacts
*/
void deleteApplicationArtifacts(List<String> directoryPaths) throws ApplicationManagementException;
/**
@ -220,6 +233,13 @@ public interface ApplicationManager {
ApplicationType type)
throws ApplicationManagementException;
/**
* Get application and all application releases associated to the application for the given application Id
*
* @param applicationId Application Id
* @return {@link ApplicationDTO}
* @throws ApplicationManagementException if error occurred application data from the database.
*/
ApplicationDTO getApplication(int applicationId) throws ApplicationManagementException;
/**
@ -292,7 +312,8 @@ public interface ApplicationManager {
void updateApplicationArtifact(String deviceType, String uuid,
ApplicationArtifact applicationArtifact) throws ApplicationManagementException;
/***
/**
* Use to update existing enterprise app release
*
* @param releaseUuid UUID of the application release.
* @param entAppReleaseWrapper {@link ApplicationReleaseDTO}
@ -302,22 +323,47 @@ public interface ApplicationManager {
ApplicationRelease updateEntAppRelease(String releaseUuid, EntAppReleaseWrapper entAppReleaseWrapper,
ApplicationArtifact applicationArtifact) throws ApplicationManagementException;
/**
* Use to update existing public app release
*
* @param releaseUuid UUID of the application release.
* @param publicAppReleaseWrapper {@link ApplicationReleaseDTO}
* @param applicationArtifact {@link ApplicationArtifact}
* @return If the application release is updated correctly True returns, otherwise retuen False
*/
ApplicationRelease updatePubAppRelease(String releaseUuid, PublicAppReleaseWrapper publicAppReleaseWrapper,
ApplicationArtifact applicationArtifact) throws ApplicationManagementException;
/**
* Use to update existing web app release
*
* @param releaseUuid UUID of the application release.
* @param webAppReleaseWrapper {@link ApplicationReleaseDTO}
* @param applicationArtifact {@link ApplicationArtifact}
* @return If the application release is updated correctly True returns, otherwise retuen False
*/
ApplicationRelease updateWebAppRelease(String releaseUuid, WebAppReleaseWrapper webAppReleaseWrapper,
ApplicationArtifact applicationArtifact) throws ApplicationManagementException;
/**
* Use to update existing custom app release
*
* @param releaseUuid UUID of the application release.
* @param customAppReleaseWrapper {@link ApplicationReleaseDTO}
* @param applicationArtifact {@link ApplicationArtifact}
* @return If the application release is updated correctly True returns, otherwise retuen False
*/
ApplicationRelease updateCustomAppRelease(String releaseUuid, CustomAppReleaseWrapper customAppReleaseWrapper,
ApplicationArtifact applicationArtifact) throws ApplicationManagementException;
/***
/**
* To validate the application creating request
*
*/
<T> void validateAppCreatingRequest(T param) throws ApplicationManagementException, RequestValidatingException;
/***
/**
*
* @throws ApplicationManagementException throws if payload does not satisfy requirements.
*/

@ -65,8 +65,7 @@ public class WSO2IAMSPApplicationService implements ISServiceProviderApplication
String uriString = constructAPIUrl(identityServer);
uriString += Constants.FORWARD_SLASH + spAppId;
req.setURI(HttpUtil.createURI(uriString));
CloseableHttpClient client = HttpClients.createDefault();
try {
try (CloseableHttpClient client = HttpClients.createDefault()) {
HttpResponse response = invokeISAPI(identityServer, client, req);
String responseBody = HttpUtil.getResponseString(response);
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
@ -82,16 +81,17 @@ public class WSO2IAMSPApplicationService implements ISServiceProviderApplication
} catch (IOException e) {
String msg = "Error occurred while calling SP Applications API. Make sure identity server is up and running";
log.error(msg, e);
throw new IdentityServerManagementException(msg);
} finally {
try {
client.close();
} catch (IOException e) {
log.error("Error occurred while closing http connection");
}
throw new IdentityServerManagementException(msg, e);
}
}
/**
* Construct error message string depending on service providers api response
* (I.E If unauthorized a different message will be returned)
*
* @param response of the service provider api call
* @return constructed error message
*/
private String constructErrorMessage(HttpResponse response) {
String msg = "Error occurred while calling SP Applications API";
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_UNAUTHORIZED) {
@ -109,8 +109,7 @@ public class WSO2IAMSPApplicationService implements ISServiceProviderApplication
uriString += Constants.QUERY_STRING_SEPARATOR + Constants.OFFSET_QUERY_PARAM + Constants.QUERY_KEY_VALUE_SEPARATOR
+ offset;
req.setURI(HttpUtil.createURI(uriString));
CloseableHttpClient client = HttpClients.createDefault();
try {
try (CloseableHttpClient client = HttpClients.createDefault()) {
HttpResponse response = invokeISAPI(identityServer, client, req);
String responseBody = HttpUtil.getResponseString(response);
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
@ -123,27 +122,43 @@ public class WSO2IAMSPApplicationService implements ISServiceProviderApplication
} catch (IOException e) {
String msg = "Error occurred while calling SP Applications API. Make sure identity server is up and running";
log.error(msg, e);
throw new IdentityServerManagementException(msg);
} finally {
try {
client.close();
} catch (IOException e) {
log.error("Error occurred while closing http connection");
}
throw new IdentityServerManagementException(msg, e);
}
}
/**
* Takes essential prerequisite steps (I.E setting authorization header),
* invokes provided GET request and returns the response
*
* @param identityServer {@link IdentityServerDTO}
* @param client httpClient that should be used to invoke
* @param request GET request to be invoked
* @return response of the invoked api
*/
private HttpResponse invokeISAPI(IdentityServerDTO identityServer, HttpClient client, HttpGet request) throws IOException {
setBasicAuthHeader(identityServer, request);
return client.execute(request);
}
/**
* Add basic auth header to provided service provider api request by getting the username and password
* from identity server bean
*
* @param identityServer {@link IdentityServerDTO}
* @param request service provider api request
*/
private void setBasicAuthHeader(IdentityServerDTO identityServer, HttpRequestBase request) {
String basicAuthHeader = HttpUtil.getBasicAuthBase64Header(identityServer.getUsername(),
identityServer.getPassword());
request.setHeader(HttpHeaders.AUTHORIZATION, basicAuthHeader);
}
/**
* Helps to construct service provider api base url
*
* @param identityServer {@link IdentityServerDTO}
* @return constructed service providers api url
*/
private String constructAPIUrl(IdentityServerDTO identityServer) {
String identityServerUrl = identityServer.getUrl();
// add "/" at the end, if the server url doesn't contain "/" at the end

@ -341,6 +341,14 @@ public class ApplicationManagerImpl implements ApplicationManager {
}
}
/**
* Use to upload/save web app release artifacts (I.E icon)
*
* @param releaseDTO {@link ApplicationReleaseDTO}
* @param applicationArtifact {@link ApplicationArtifact}
* @return constructed {@link ApplicationReleaseDTO} with upload details
* @throws ResourceManagementException if error occurred while uploading
*/
private ApplicationReleaseDTO uploadWebAppReleaseArtifacts(ApplicationReleaseDTO releaseDTO, ApplicationArtifact applicationArtifact)
throws ResourceManagementException {
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true);
@ -350,6 +358,15 @@ public class ApplicationManagerImpl implements ApplicationManager {
return addImageArtifacts(releaseDTO, applicationArtifact, tenantId);
}
/**
* Use to upload/save public app release artifacts (I.E icon)
*
* @param releaseDTO {@link ApplicationReleaseDTO}
* @param applicationArtifact {@link ApplicationArtifact}
* @param deviceType Device Type name
* @return constructed {@link ApplicationReleaseDTO} with upload details
* @throws ResourceManagementException if error occurred while uploading
*/
private ApplicationReleaseDTO uploadPubAppReleaseArtifacts(ApplicationReleaseDTO releaseDTO, ApplicationArtifact applicationArtifact,
String deviceType)
throws ResourceManagementException {
@ -384,6 +401,15 @@ public class ApplicationManagerImpl implements ApplicationManager {
}
}
/**
* Use to upload/save public app release artifacts (I.E icon)
*
* @param releaseDTO {@link ApplicationReleaseDTO}
* @param applicationArtifact {@link ApplicationArtifact}
* @param deviceType Device Type name
* @return constructed {@link ApplicationReleaseDTO} with upload details
* @throws ResourceManagementException if error occurred while uploading
*/
private ApplicationReleaseDTO uploadCustomAppReleaseArtifacts(ApplicationReleaseDTO releaseDTO, ApplicationArtifact applicationArtifact,
String deviceType)
throws ResourceManagementException, ApplicationManagementException {
@ -402,7 +428,7 @@ public class ApplicationManagerImpl implements ApplicationManager {
} catch (IOException e) {
String msg = "Error occurred when uploading release artifact into the server";
log.error(msg);
throw new ApplicationManagementException(msg);
throw new ApplicationManagementException(msg, e);
}
return addImageArtifacts(releaseDTO, applicationArtifact, tenantId);
}
@ -436,16 +462,32 @@ public class ApplicationManagerImpl implements ApplicationManager {
}
}
/**
* Helps to byte content of release binary file of application artifact
* This method can be useful when uploading application release binary file or when generating md5hex of release binary
*
* @param artifact {@link ApplicationArtifact}
* @return byte content of application release binary file
* @throws ApplicationManagementException if error occurred while getting byte content
*/
private byte[] getByteContentOfApp(ApplicationArtifact artifact) throws ApplicationManagementException{
try {
return IOUtils.toByteArray(artifact.getInstallerStream());
} catch (IOException e) {
String msg = "Error occurred while getting byte content of app binary artifact";
log.error(msg);
throw new ApplicationManagementException(msg);
throw new ApplicationManagementException(msg, e);
}
}
/**
* Useful to generate md5hex string of application release
*
* @param applicationArtifact {@link ApplicationArtifact}
* @param content byte array content of application release binary file
* @return Generated md5hex string
* @throws ApplicationManagementException if any error occurred while generating md5hex string
*/
private String generateMD5OfApp(ApplicationArtifact applicationArtifact, byte[] content) throws ApplicationManagementException {
try {
String md5OfApp = StorageManagementUtil.getMD5(new ByteArrayInputStream(content));
@ -458,7 +500,7 @@ public class ApplicationManagerImpl implements ApplicationManager {
} catch( ApplicationStorageManagementException e) {
String msg = "Error occurred while generating md5sum value of " + applicationArtifact.getInstallerName();
log.error(msg);
throw new ApplicationManagementException(msg);
throw new ApplicationManagementException(msg, e);
}
}
@ -1197,13 +1239,6 @@ public class ApplicationManagerImpl implements ApplicationManager {
}
}
/**
* Get Application and all application releases associated to the application that has given application Id
*
* @param applicationId Application Id
* @return {@link ApplicationDTO}
* @throws ApplicationManagementException if error occurred application data from the databse.
*/
@Override
public ApplicationDTO getApplication(int applicationId) throws ApplicationManagementException {
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true);

@ -80,6 +80,13 @@ public class SPApplicationManagerImpl implements SPApplicationManager {
return APIUtil.identityServerDtoToIdentityServerResponse(identityServerDTO);
}
/**
* This is similar to getIdentityServerFromDB method except throws {@link NotFoundException} if identity server
* does not exist for the given id
*
* @param identityServerId id of identity server
* @return {@link IdentityServerDTO}
*/
private IdentityServerDTO getIdentityServer(int identityServerId) throws ApplicationManagementException {
IdentityServerDTO identityServerDTO = getIdentityServerFromDB(identityServerId);
if (identityServerDTO == null) {
@ -90,6 +97,12 @@ public class SPApplicationManagerImpl implements SPApplicationManager {
return identityServerDTO;
}
/**
* Use to get {@link IdentityServerDTO} bean from database. Returns null if does not exist
*
* @param identityServerId id of identity server
* @return {@link IdentityServerDTO}
*/
private IdentityServerDTO getIdentityServerFromDB(int identityServerId) throws ApplicationManagementException {
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId();
try {
@ -191,6 +204,12 @@ public class SPApplicationManagerImpl implements SPApplicationManager {
}
}
/**
* Validate the identity server delete request
*
* @param identityServerId identity server id
* @throws BadRequestException if provided identity server id is invalid
*/
private void validateIdentityServerDeleteRequest(int identityServerId) throws ApplicationManagementException {
IdentityServerDTO identityServerDTO = getIdentityServerFromDB(identityServerId);
if (identityServerDTO == null) {
@ -200,6 +219,15 @@ public class SPApplicationManagerImpl implements SPApplicationManager {
}
}
/**
* This method is useful to re-construct the api params Map using updated identity server bean {@link IdentityServerDTO}
* For example updated identity server bean may contain only updated api param, in which case the existing api param values
* should be re-added to updated identity server bean
*
* @param updatedIdentityServerDTO updated identity server request payload
* @param existingIdentityServerDTO corresponding existing identity server of updated identity server
* @return Constructed api param map
*/
private Map<String, String> constructUpdatedApiParams(IdentityServerDTO updatedIdentityServerDTO,
IdentityServerDTO existingIdentityServerDTO) {
Map<String, String> updatedApiParams = updatedIdentityServerDTO.getApiParams();
@ -292,6 +320,12 @@ public class SPApplicationManagerImpl implements SPApplicationManager {
validateIdentityServerUrl(identityServerDTO.getUrl());
}
/**
* Validate provided identity server url (For example make sure it uses http/https protocol)
*
* @param url url of the identity server
* @throws BadRequestException if url is invalid
*/
private void validateIdentityServerUrl(String url) throws BadRequestException {
String[] schemes = {"http","https"};
UrlValidator urlValidator = new UrlValidator(schemes, UrlValidator.ALLOW_LOCAL_URLS);
@ -302,17 +336,32 @@ public class SPApplicationManagerImpl implements SPApplicationManager {
}
}
private void validateUpdateIdentityServerRequestApiParam(IdentityServerDTO identityServerUpdateDTO,
/**
* Validate provided api params map in a identity server updated request
* For example the updated api param map may not contain all the required api params
*
* @param updatedIdentityServerDto Identity server update request payload bean
* @param existingIdentityServerDTO Corresponding existing identity server bean of the updated identity server
* @throws ApplicationManagementException if any api param is invalid
*/
private void validateUpdateIdentityServerRequestApiParam(IdentityServerDTO updatedIdentityServerDto,
IdentityServerDTO existingIdentityServerDTO) throws ApplicationManagementException {
ISServiceProviderApplicationService serviceProviderApplicationService =
ISServiceProviderApplicationService.of(existingIdentityServerDTO.getProviderName());
List<String> requiredApiParams = serviceProviderApplicationService.getRequiredApiParams();
if (!identityServerUpdateDTO.getProviderName().equals(existingIdentityServerDTO.getProviderName())) {
validateAllRequiredParamsExists(identityServerUpdateDTO, requiredApiParams);
if (!updatedIdentityServerDto.getProviderName().equals(existingIdentityServerDTO.getProviderName())) {
validateAllRequiredParamsExists(updatedIdentityServerDto, requiredApiParams);
}
validateIfAnyInvalidParamExists(identityServerUpdateDTO, requiredApiParams);
validateIfAnyInvalidParamExists(updatedIdentityServerDto, requiredApiParams);
}
/**
* Validate api params map of identity server create request payload
* For example the api param map may not contain all the required api params
*
* @param identityServerDTO {@link IdentityServerDTO}
* @throws ApplicationManagementException if any api param is invalid
*/
private void validateCreateIdentityServerRequestApiParams(IdentityServerDTO identityServerDTO) throws ApplicationManagementException {
ISServiceProviderApplicationService serviceProviderApplicationService =
ISServiceProviderApplicationService.of(identityServerDTO.getProviderName());
@ -321,6 +370,13 @@ public class SPApplicationManagerImpl implements SPApplicationManager {
validateIfAnyInvalidParamExists(identityServerDTO, requiredApiParams);
}
/**
* Make sure if all required api params exists for the given identity server bean
*
* @param identityServerDTO {@link IdentityServerDTO}
* @param requiredApiParams all mandatory api params
* @throws BadRequestException if a required api param does not exist
*/
private void validateAllRequiredParamsExists(IdentityServerDTO identityServerDTO, List<String> requiredApiParams)
throws BadRequestException {
for (String param : requiredApiParams) {
@ -333,6 +389,14 @@ public class SPApplicationManagerImpl implements SPApplicationManager {
}
}
/**
* Make sure if all api params are valid
* For example it may contain an unwanted api param
*
* @param identityServerDTO {@link IdentityServerDTO}
* @param requiredApiParams all required api params
* @throws BadRequestException if an unwanted api param exist
*/
private void validateIfAnyInvalidParamExists(IdentityServerDTO identityServerDTO, List<String> requiredApiParams)
throws BadRequestException {
for (String param : identityServerDTO.getApiParamKeys()) {
@ -344,6 +408,12 @@ public class SPApplicationManagerImpl implements SPApplicationManager {
}
}
/**
* If the given providerName does not exist in the identity server config file
*
* @param providerName Name of the identity service provider
* @return if provider name exist in identity server config
*/
private boolean isIdentityServiceProviderNotConfigured(String providerName) {
List<IdentityServiceProvider> identityServiceProviders = ConfigurationManager.getInstance().getIdentityServerConfiguration().
getIdentityServiceProviders();
@ -508,7 +578,7 @@ public class SPApplicationManagerImpl implements SPApplicationManager {
} catch (ApplicationManagementException e) {
String msg = "Identity service provider configuration file is invalid. Hence failed to proceed.";
log.error(msg);
throw new ApplicationManagementException(msg);
throw new ApplicationManagementException(msg, e);
}
}
return identityServiceProviderDTOS;

@ -95,7 +95,7 @@ public class SPApplicationServiceImpl implements SPApplicationService {
return Response.status(Response.Status.OK).entity("Successfully deleted identity server").build();
} catch (NotFoundException e) {
String msg = "Identity server with the id " + id + " does not exist.";
log.error(msg);
log.error(msg, e);
return Response.status(Response.Status.BAD_REQUEST).entity(msg).build();
} catch (ApplicationManagementException e) {
String errMsg = "Error occurred while trying to merge identity server apps with existing apps";
@ -114,7 +114,7 @@ public class SPApplicationServiceImpl implements SPApplicationService {
return Response.status(Response.Status.OK).entity(identityServer).build();
} catch (NotFoundException e) {
String msg = "Identity server with the id " + id + " does not exist.";
log.error(msg);
log.error(msg, e);
return Response.status(Response.Status.BAD_REQUEST).entity(msg).build();
} catch (ApplicationManagementException e) {
String errMsg = "Error occurred while trying to merge identity server apps with existing apps";
@ -133,7 +133,7 @@ public class SPApplicationServiceImpl implements SPApplicationService {
return Response.status(Response.Status.OK).entity(identityServerResponse).build();
} catch (NotFoundException e) {
String msg = "Identity server with the id " + id + " does not exist.";
log.error(msg);
log.error(msg, e);
return Response.status(Response.Status.BAD_REQUEST).entity(msg).build();
} catch (BadRequestException e) {
String errMsg = "Identity server request payload is invalid";

@ -24,6 +24,12 @@ import java.util.Base64;
public class FileUtil {
/**
* Useful to remove path separator string "," from base64 string
*
* @param base64String base64 string
* @return base64 string without path separator
*/
public static String removePathSeparatorFromBase64String(String base64String) {
String partSeparator = ",";
if (base64String.contains(partSeparator)) {
@ -32,6 +38,12 @@ public class FileUtil {
return base64String;
}
/**
* Useful to convert base64 string to input stream
*
* @param base64 base64 string to be converted
* @return {@link InputStream} of the provided base64 string
*/
public static InputStream base64ToInputStream(String base64) {
base64 = FileUtil.removePathSeparatorFromBase64String(base64);
byte[] base64Bytes = Base64.getDecoder().decode(base64);
@ -72,13 +84,24 @@ public class FileUtil {
return suffix;
}
/**
* Use to extract file extension from file name
*
* @param fileName name of the file
* @return extension of the file
*/
private static String extractFileExtension(String fileName) {
return fileName.substring(fileName.lastIndexOf('.') + 1);
}
/**
* Use to extract the file name without the extension
* For example if you provide "main.java" as the fileName this will return main
*
* @param fileName name of the file
* @return file name without file extension
*/
private static String extractFileNameWithoutExtension(String fileName) {
return fileName.substring(0, fileName.lastIndexOf('.'));
}
}

@ -32,20 +32,47 @@ import java.util.Map;
public class HttpUtil {
/**
* Use to create {@link URI} from string
* This does encoding of the provided uri string before creating the URI
*
* @param uriString uri string to be used to create the URI
* @return created URI
*/
public static URI createURI(String uriString) {
uriString = uriString.replace(" ", "%20");
return URI.create(uriString);
}
/**
* Use to create basic auth header string for provided credentials
*
* @param userName username credential
* @param password password credential
* @return Basic auth header
*/
public static String getBasicAuthBase64Header(String userName, String password) {
return Constants.BASIC_AUTH_HEADER_PREFIX + getBase64Encode(userName, password);
}
/**
* Use to get the base64 encoded string of key value pair.
* For example this can be useful when creating basic auth header
*
* @return base64 encoded string of provided key and value
*/
public static String getBase64Encode(String key, String value) {
return new String(Base64.encodeBase64((key + ":" + value).getBytes()));
}
public static String getRequestSubPathFromEnd(URI requestUri, int position) {
/**
* Useful to get the sub path in a position from the given uri starting from end of the uri
*
* @param requestUri {@link URI}
* @param position of which the sub path is needed
* @return Sub path of the uri
*/
public static String extractRequestSubPathFromEnd(URI requestUri, int position) {
if (requestUri.getPath() != null) {
String[] pathList = requestUri.getPath().split("/");
if (pathList.length - 1 >= position) {
@ -55,8 +82,15 @@ public class HttpUtil {
return null;
}
public static String getRequestSubPath(String fullPath, int position) {
String[] pathList = fullPath.split("/");
/**
* Useful to get the sub path in a position from the given uri
*
* @param uri uri string from which the sub path should be extracted
* @param position of which the sub path is needed
* @return Sub path of the uri
*/
public static String extractRequestSubPath(String uri, int position) {
String[] pathList = uri.split("/");
if (pathList.length - 1 > position) {
String path = pathList[position + 1];
if(path.contains(Constants.URI_QUERY_SEPARATOR)) {
@ -67,14 +101,37 @@ public class HttpUtil {
return null;
}
/**
* This returns the response body as string
*
* @param response {@link HttpResponse}
* @return Response body string
* @throws IOException if errors while converting response body to string
*/
public static String getResponseString(HttpResponse response) throws IOException {
return EntityUtils.toString(response.getEntity());
}
public static boolean isQueryParamExist(String param, URI request) {
Map<String, List<String>> queryMap = getQueryMap(request);
/**
* Useful to check if a given query param exists in uri
*
* @param param query param to be checked
* @param uri in which query param should be checked
* @return if the provided query parameter exists in uri
*/
public static boolean isQueryParamExist(String param, URI uri) {
Map<String, List<String>> queryMap = getQueryMap(uri);
return queryMap.containsKey(param);
}
/**
* This is useful to get first query parameter value from a query map.
* For example a query parameter may have multiple values.
*
* @param param query parameter of which the value is needed
* @param queryMap query map which contains query paramters and it's values
* @return First value of provided query parameter
*/
public static String getFirstQueryValue(String param, Map<String, List<String>> queryMap) {
List<String> valueList = queryMap.get(param);
String firstValue = null;
@ -83,6 +140,20 @@ public class HttpUtil {
}
return firstValue;
}
/**
* This constructs a key/value Map from query string of the provided uri.
* In other words this will create a map with query parameters as keys and their
* values as values.
*
* For example if the uri contains "?bar=1&foo=2" this will return a map
* with bar and foo as keys and 1 and 2 as their values
*
* This is similar to getQueryMap(URI uri) method except that this accepts uri string
*
* @param uri of which the query map to be created
* @return Query map of the provided uri
*/
public static Map<String, List<String>> getQueryMap(String uri) {
String query = getQueryFromURIPath(uri);
Map<String, List<String>> map = new HashMap<>();
@ -103,8 +174,20 @@ public class HttpUtil {
}
return map;
}
public static Map<String, List<String>> getQueryMap(URI request) {
String query = request.getQuery();
/**
* This constructs a key/value Map from query string of the provided uri.
* In other words this will create a map with query parameters as keys and their
* values as values.
*
* For example if the uri contains "?bar=1&foo=2" this will return a map
* with bar and foo as keys and 1 and 2 as their values
*
* @param uri of which the query map to be created
* @return Query map of the provided uri
*/
public static Map<String, List<String>> getQueryMap(URI uri) {
String query = uri.getQuery();
Map<String, List<String>> map = new HashMap<>();
if (query != null) {
String[] params = query.split("&");
@ -123,6 +206,13 @@ public class HttpUtil {
}
return map;
}
/**
* Get query string from uri path. Return null if no query string exists
*
* @param uri of which query string should be taken
* @return Query string of the provided uri
*/
public static String getQueryFromURIPath(String uri) {
String query = null;
if (uri.length() > "?".length() && uri.contains("?")) {
@ -134,6 +224,12 @@ public class HttpUtil {
return query;
}
/**
* Get content type of http response
*
* @param response {@link HttpResponse}
* @return Content type
*/
public static String getContentType(HttpResponse response) {
ContentType contentType = ContentType.getOrDefault(response.getEntity());
return contentType.getMimeType();

Loading…
Cancel
Save