Skip to content

Commit

Permalink
refactor($starter): refine starter classes
Browse files Browse the repository at this point in the history
  • Loading branch information
johnnymillergh committed Jul 14, 2021
1 parent 48c0662 commit a334e9d
Show file tree
Hide file tree
Showing 9 changed files with 124 additions and 158 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
import lombok.extern.slf4j.Slf4j;
import lombok.val;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.mvc.method.RequestMappingInfo;
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
Expand All @@ -23,7 +22,6 @@
@Validated
@RequiredArgsConstructor
public class HttpApiScanHelper {
private final RequestMappingHandlerMapping requestMappingHandlerMapping;
private static final String EXCLUDED_PACKAGE;

static {
Expand All @@ -36,6 +34,8 @@ public class HttpApiScanHelper {
log.warn("EXCLUDED_PACKAGE was generated dynamically. EXCLUDED_PACKAGE = {}", EXCLUDED_PACKAGE);
}

private final RequestMappingHandlerMapping requestMappingHandlerMapping;

/**
* Scan map.
*
Expand All @@ -44,15 +44,15 @@ public class HttpApiScanHelper {
* @author Johnny Miller (锺俊), email: johnnysviva@outlook.com, date: 12/25/2020 4:02 PM
*/
public Map<RequestMappingInfo, HandlerMethod> scan(@NotBlank String includedPackage) {
Map<RequestMappingInfo, HandlerMethod> handlerMethods = requestMappingHandlerMapping.getHandlerMethods();
Map<RequestMappingInfo, HandlerMethod> handlerMethods = this.requestMappingHandlerMapping.getHandlerMethods();
log.debug("Scanned request mapping info: {}", handlerMethods);
val filteredHandlerMethods = new LinkedHashMap<RequestMappingInfo, HandlerMethod>();
handlerMethods.forEach((requestMappingInfo, handlerMethod) -> {
// filter the Controller APIs that are defined in `spring-cloud-starter`
if (handlerMethod.toString().contains(includedPackage) &&
!handlerMethod.toString().contains(EXCLUDED_PACKAGE)) {
try {
RequestMethod requestMethod = new ArrayList<>(
val requestMethod = new ArrayList<>(
requestMappingInfo.getMethodsCondition().getMethods()).get(0);
log.debug("Request: [{}] {}, handler method: {}", requestMethod,
requestMappingInfo.getPatternsCondition(), handlerMethod);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,22 +1,15 @@
package com.jmsoftware.maf.springcloudstarter.helper;

import cn.hutool.core.util.StrUtil;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import cn.hutool.http.HttpUtil;
import lombok.*;
import lombok.extern.slf4j.Slf4j;
import lombok.val;
import org.springframework.boot.web.context.WebServerInitializedEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.Inet4Address;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.URL;
import java.net.*;
import java.util.Enumeration;

/**
Expand Down Expand Up @@ -48,63 +41,47 @@ public void onApplicationEvent(WebServerInitializedEvent event) {
* @return public IP
*/
public String getPublicIp() {
String jointProfiles = String.join(",", environment.getActiveProfiles());
if (StrUtil.isNotBlank(jointProfiles)) {
if (jointProfiles.contains(DEVELOPMENT_ENVIRONMENT)) {
log.debug("Current active profiles for environment contains: {}", DEVELOPMENT_ENVIRONMENT);
return this.getInternetIp();
}
}
try {
// An API provided by https://whatismyipaddress.com/api
val url = new URL("https://ipv4bot.whatismyipaddress.com/");
val sc = new BufferedReader(new InputStreamReader(url.openStream()));
// Read system IP Address
return sc.readLine().trim();
} catch (Exception e) {
log.error("Cannot execute properly to get IP address from https://whatismyipaddress.com/api", e);
val jointProfiles = String.join(",", this.environment.getActiveProfiles());
if (StrUtil.containsIgnoreCase(jointProfiles, DEVELOPMENT_ENVIRONMENT)) {
log.debug("Current active profiles for environment contains: {}. U", DEVELOPMENT_ENVIRONMENT);
return this.getInternetIp();
}
return this.getInternetIp();
// An API provided by https://whatismyipaddress.com/api
return HttpUtil.get("https://ipv4bot.whatismyipaddress.com/").trim();
}

/**
* Get internet IP.
*
* @return internet IP
*/
@SneakyThrows({SocketException.class})
private String getInternetIp() {
val intranetIp = this.getIntranetIp();
try {
val networks = NetworkInterface.getNetworkInterfaces();
InetAddress ip;
Enumeration<InetAddress> addresses;
while (networks.hasMoreElements()) {
addresses = networks.nextElement().getInetAddresses();
while (addresses.hasMoreElements()) {
ip = addresses.nextElement();
if (ip instanceof Inet4Address
&& ip.isSiteLocalAddress()
&& !ip.getHostAddress().equals(intranetIp)) {
return ip.getHostAddress();
}
val networks = NetworkInterface.getNetworkInterfaces();
InetAddress ip;
Enumeration<InetAddress> addresses;
while (networks.hasMoreElements()) {
addresses = networks.nextElement().getInetAddresses();
while (addresses.hasMoreElements()) {
ip = addresses.nextElement();
if (ip instanceof Inet4Address
&& ip.isSiteLocalAddress()
&& !ip.getHostAddress().equals(intranetIp)) {
return ip.getHostAddress();
}
}
return intranetIp;
} catch (Exception e) {
throw new RuntimeException(e);
}
return intranetIp;
}

/**
* Get intranet IP.
*
* @return intranet IP
*/
@SneakyThrows({UnknownHostException.class})
private String getIntranetIp() {
try {
return InetAddress.getLocalHost().getHostAddress();
} catch (Exception e) {
throw new RuntimeException(e);
}
return InetAddress.getLocalHost().getHostAddress();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
import io.minio.*;
import io.minio.http.Method;
import io.minio.messages.Bucket;
import io.minio.messages.DeleteError;
import io.minio.messages.DeleteObject;
import io.minio.messages.Item;
import lombok.RequiredArgsConstructor;
Expand Down Expand Up @@ -45,24 +44,24 @@ public class MinioHelper {

@SneakyThrows
public boolean bucketExists(@NotBlank String bucketName) {
return minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());
return this.minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());
}

@SneakyThrows
@SuppressWarnings("UnusedReturnValue")
public boolean makeBucket(@NotBlank String bucketName) {
val exists = bucketExists(bucketName);
if (exists) {
if (this.bucketExists(bucketName)) {
log.warn("The bucket named '{}' exists", bucketName);
return false;
}
minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());
this.minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());
return true;
}

@SneakyThrows
public ObjectWriteResponse put(@NotBlank String bucketName, @NotBlank String objectName,
@NotNull MultipartFile multipartFile) {
return minioClient.putObject(
return this.minioClient.putObject(
PutObjectArgs.builder()
.bucket(bucketName)
.object(objectName)
Expand All @@ -74,7 +73,7 @@ public ObjectWriteResponse put(@NotBlank String bucketName, @NotBlank String obj
@SneakyThrows
public ObjectWriteResponse putObject(@NotBlank String bucketName, @NotBlank String objectName,
@NotNull InputStream inputStream, @NotBlank String contentType) {
return minioClient.putObject(
return this.minioClient.putObject(
PutObjectArgs
.builder()
.bucket(bucketName)
Expand All @@ -86,101 +85,98 @@ public ObjectWriteResponse putObject(@NotBlank String bucketName, @NotBlank Stri

@SneakyThrows
public List<String> listBucketNames() {
return listBuckets().stream().map(Bucket::name).collect(Collectors.toList());
return this.listBuckets().stream().map(Bucket::name).collect(Collectors.toList());
}

@SneakyThrows
public List<Bucket> listBuckets() {
return minioClient.listBuckets();
return this.minioClient.listBuckets();
}

@SneakyThrows
public boolean removeBucket(@NotBlank String bucketName) {
val exists = bucketExists(bucketName);
if (!exists) {
if (!this.bucketExists(bucketName)) {
return false;
}
Iterable<Result<Item>> myObjects = listObjects(bucketName);
for (Result<Item> result : myObjects) {
Item item = result.get();
val myObjects = this.listObjects(bucketName);
for (val result : myObjects) {
val item = result.get();
// If item has files, fail to remove
if (item.size() > 0) {
return false;
}
}
// If bucket is empty, then it can be removed
minioClient.removeBucket(RemoveBucketArgs.builder().bucket(bucketName).build());
return !bucketExists(bucketName);
this.minioClient.removeBucket(RemoveBucketArgs.builder().bucket(bucketName).build());
return !this.bucketExists(bucketName);
}

@SneakyThrows
public List<String> listObjectNames(@NotBlank String bucketName) {
List<String> listObjectNames = new LinkedList<>();
boolean exists = bucketExists(bucketName);
if (!exists) {
val listObjectNames = new LinkedList<String>();
if (!this.bucketExists(bucketName)) {
return listObjectNames;
}
Iterable<Result<Item>> myObjects = listObjects(bucketName);
for (Result<Item> result : myObjects) {
Item item = result.get();
val myObjects = this.listObjects(bucketName);
for (val result : myObjects) {
val item = result.get();
listObjectNames.add(item.objectName());
}
return listObjectNames;
}

@SneakyThrows
public Iterable<Result<Item>> listObjects(@NotBlank String bucketName) {
boolean exists = bucketExists(bucketName);
if (exists) {
return minioClient.listObjects(ListObjectsArgs.builder().bucket(bucketName).build());
if (!this.bucketExists(bucketName)) {
return null;
}
return null;
return this.minioClient.listObjects(ListObjectsArgs.builder().bucket(bucketName).build());
}

@SneakyThrows
public GetObjectResponse getObject(@NotBlank String bucketName, @NotBlank String objectName) {
if (!bucketExists(bucketName)) {
if (!this.bucketExists(bucketName)) {
return null;
}
val statObjectResponse = statObject(bucketName, objectName);
val statObjectResponse = this.statObject(bucketName, objectName);
if (ObjectUtil.isNull(statObjectResponse) || statObjectResponse.size() == 0) {
return null;
}
return minioClient.getObject(GetObjectArgs.builder().bucket(bucketName).object(objectName).build());
return this.minioClient.getObject(GetObjectArgs.builder().bucket(bucketName).object(objectName).build());
}

@SneakyThrows
public GetObjectResponse getObject(@NotBlank String bucketName, @NotBlank String objectName, @Min(0L) long offset,
@NotNull @Min(0L) Long length) {
if (!bucketExists(bucketName)) {
if (!this.bucketExists(bucketName)) {
return null;
}
val statObjectResponse = statObject(bucketName, objectName);
val statObjectResponse = this.statObject(bucketName, objectName);
if (ObjectUtil.isNull(statObjectResponse) || statObjectResponse.size() == 0) {
return null;
}
return minioClient.getObject(
return this.minioClient.getObject(
GetObjectArgs.builder().bucket(bucketName).object(objectName).offset(offset).length(length).build());
}

@SneakyThrows
public boolean removeObject(String bucketName, String objectName) {
if (!bucketExists(bucketName)) {
if (!this.bucketExists(bucketName)) {
return false;
}
minioClient.removeObject(RemoveObjectArgs.builder().bucket(bucketName).object(objectName).build());
this.minioClient.removeObject(RemoveObjectArgs.builder().bucket(bucketName).object(objectName).build());
return true;
}

@SneakyThrows
public List<String> removeObject(String bucketName, List<String> objectNames) {
final List<String> deleteErrorNameList = new LinkedList<>();
if (bucketExists(bucketName)) {
val deleteErrorNameList = new LinkedList<String>();
if (this.bucketExists(bucketName)) {
val deleteObjectList = objectNames.stream().map(DeleteObject::new).collect(Collectors.toList());
Iterable<Result<DeleteError>> results = minioClient.removeObjects(
val results = this.minioClient.removeObjects(
RemoveObjectsArgs.builder().bucket(bucketName).objects(deleteObjectList).build());
for (Result<DeleteError> result : results) {
DeleteError error = result.get();
for (val result : results) {
val error = result.get();
deleteErrorNameList.add(error.objectName());
}
}
Expand All @@ -191,10 +187,10 @@ public List<String> removeObject(String bucketName, List<String> objectNames) {
public String getPresignedObjectUrl(@NotBlank String bucketName, @NotBlank String objectName,
@NotNull Method method,
@NotNull @Min(1L) @Max(DEFAULT_EXPIRY_TIME) Integer expiration) {
if (!bucketExists(bucketName)) {
if (!this.bucketExists(bucketName)) {
return null;
}
return minioClient.getPresignedObjectUrl(
return this.minioClient.getPresignedObjectUrl(
GetPresignedObjectUrlArgs
.builder()
.bucket(bucketName)
Expand All @@ -206,38 +202,18 @@ public String getPresignedObjectUrl(@NotBlank String bucketName, @NotBlank Strin

@SneakyThrows
public StatObjectResponse statObject(@NotBlank String bucketName, @NotBlank String objectName) {
boolean exists = bucketExists(bucketName);
if (!exists) {
if (!this.bucketExists(bucketName)) {
return null;
}
return minioClient.statObject(StatObjectArgs.builder().bucket(bucketName).object(objectName).build());
return this.minioClient.statObject(StatObjectArgs.builder().bucket(bucketName).object(objectName).build());
}

@SneakyThrows
public String getPresignedObjectUrl(@NotBlank String bucketName, @NotBlank String objectName) {
if (!bucketExists(bucketName)) {
if (!this.bucketExists(bucketName)) {
return null;
}
return minioClient.getPresignedObjectUrl(
return this.minioClient.getPresignedObjectUrl(
GetPresignedObjectUrlArgs.builder().bucket(bucketName).object(objectName).build());
}

// public void downloadFile(@NotBlank String bucketName, @NotBlank String fileName, String originalName,
// @NotNull HttpServletResponse response) {
// InputStream file = minioClient.getObject(bucketName, fileName);
// String filename = new String(fileName.getBytes("ISO8859-1"), StandardCharsets.UTF_8);
// if (StringUtils.isNotEmpty(originalName)) {
// fileName = originalName;
// }
// response.setHeader("Content-Disposition", "attachment;filename=" + filename);
// ServletOutputStream servletOutputStream = response.getOutputStream();
// int len;
// byte[] buffer = new byte[1024];
// while ((len = file.read(buffer)) > 0) {
// servletOutputStream.write(buffer, 0, len);
// }
// servletOutputStream.flush();
// file.close();
// servletOutputStream.close();
// }
}
Loading

0 comments on commit a334e9d

Please sign in to comment.