├── README.md
├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── .gitignore
├── src
├── main
│ ├── java
│ │ └── paasta
│ │ │ └── delivery
│ │ │ └── pipeline
│ │ │ └── storage
│ │ │ └── api
│ │ │ ├── common
│ │ │ ├── Constants.java
│ │ │ ├── AspectService.java
│ │ │ └── RestTemplateService.java
│ │ │ ├── Application.java
│ │ │ ├── config
│ │ │ ├── RestTemplateConfig.java
│ │ │ ├── ServletConfig.java
│ │ │ ├── WebMvcConfig.java
│ │ │ └── SwiftOsConfig.java
│ │ │ └── file
│ │ │ ├── FileInfo.java
│ │ │ ├── FileController.java
│ │ │ └── FileService.java
│ └── resources
│ │ ├── logback-spring.xml
│ │ └── application.yml
└── test
│ └── java
│ └── paasta
│ └── delivery
│ └── pipeline
│ └── storage
│ └── api
│ └── file
│ └── FileServiceTest.java
├── gradlew.bat
├── gradlew
└── LICENSE
/README.md:
--------------------------------------------------------------------------------
1 | ## Storage API
2 |
3 | ### 1. 개요
4 |
5 | 배포파이프라인에서 빌드에 아티팩트 파일을 관리하는 REST API를 제공한다.
6 |
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PaaS-TA/DELIVERY-PIPELINE-BINARY-STORAGE-API/HEAD/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Mon Jun 19 12:43:30 KST 2017
2 | distributionBase=GRADLE_USER_HOME
3 | distributionPath=wrapper/dists
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 | distributionUrl=https\://services.gradle.org/distributions/gradle-3.4.1-all.zip
7 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | /logs/
2 | *.log
3 | .gradle
4 | /build/
5 | /out/
6 | !gradle/wrapper/gradle-wrapper.jar
7 |
8 | ### STS ###
9 | .apt_generated
10 | .classpath
11 | .factorypath
12 | .project
13 | .settings
14 | .springBeans
15 |
16 | ### IntelliJ IDEA ###
17 | .idea
18 | *.iws
19 | *.iml
20 | *.ipr
21 |
22 | ### NetBeans ###
23 | nbproject/private/
24 | build/
25 | nbbuild/
26 | dist/
27 | nbdist/
28 | .nb-gradle/
--------------------------------------------------------------------------------
/src/main/java/paasta/delivery/pipeline/storage/api/common/Constants.java:
--------------------------------------------------------------------------------
1 | package paasta.delivery.pipeline.storage.api.common;
2 |
3 | /**
4 | * paastaDeliveryPipelineApi
5 | * paasta.delivery.pipeline.storage.api.common
6 | *
7 | * @author REX
8 | * @version 1.0
9 | * @since 6/21/2017
10 | */
11 | public class Constants {
12 |
13 | public static final String RESULT_STATUS_SUCCESS = "SUCCESS";
14 | public static final String RESULT_STATUS_FAIL = "FAIL";
15 |
16 | public static final String TARGET_COMMON_API = "commonApi";
17 |
18 | Constants() {}
19 |
20 | }
21 |
22 |
--------------------------------------------------------------------------------
/src/main/java/paasta/delivery/pipeline/storage/api/Application.java:
--------------------------------------------------------------------------------
1 | package paasta.delivery.pipeline.storage.api;
2 |
3 | import org.springframework.boot.SpringApplication;
4 | import org.springframework.boot.autoconfigure.SpringBootApplication;
5 |
6 | /**
7 | * The type Application.
8 | */
9 | @SpringBootApplication
10 | public class Application {
11 |
12 | /**
13 | * The entry point of application.
14 | *
15 | * @param args the input arguments
16 | */
17 | public static void main(String[] args) {
18 | SpringApplication.run(Application.class, args);
19 | }
20 |
21 | }
22 |
--------------------------------------------------------------------------------
/src/main/java/paasta/delivery/pipeline/storage/api/config/RestTemplateConfig.java:
--------------------------------------------------------------------------------
1 | package paasta.delivery.pipeline.storage.api.config;
2 |
3 | import org.springframework.context.annotation.Bean;
4 | import org.springframework.context.annotation.Configuration;
5 | import org.springframework.web.client.RestTemplate;
6 |
7 | /**
8 | * paastaDeliveryPipelineApi
9 | * paasta.delivery.pipeline.storage.api.config
10 | *
11 | * @author REX
12 | * @version 1.0
13 | * @since 6/21/2017
14 | */
15 | @Configuration
16 | public class RestTemplateConfig {
17 |
18 | /**
19 | * Rest template rest template.
20 | *
21 | * @return the rest template
22 | */
23 | @Bean
24 | public RestTemplate restTemplate() {
25 | return new RestTemplate();
26 | }
27 |
28 | }
29 |
--------------------------------------------------------------------------------
/src/main/java/paasta/delivery/pipeline/storage/api/config/ServletConfig.java:
--------------------------------------------------------------------------------
1 | package paasta.delivery.pipeline.storage.api.config;
2 |
3 | import org.springframework.boot.builder.SpringApplicationBuilder;
4 | import org.springframework.boot.web.support.SpringBootServletInitializer;
5 | import org.springframework.context.annotation.Configuration;
6 | import paasta.delivery.pipeline.storage.api.Application;
7 |
8 | /**
9 | * paastaDeliveryPipelineApi
10 | * paasta.delivery.pipeline.storage.api.config
11 | *
12 | * @author REX
13 | * @version 1.0
14 | * @since 6 / 7/2017
15 | */
16 | @Configuration
17 | public class ServletConfig extends SpringBootServletInitializer {
18 |
19 | @Override
20 | protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
21 | return application.sources(Application.class);
22 | }
23 |
24 | }
25 |
--------------------------------------------------------------------------------
/src/main/java/paasta/delivery/pipeline/storage/api/config/WebMvcConfig.java:
--------------------------------------------------------------------------------
1 | package paasta.delivery.pipeline.storage.api.config;
2 |
3 | import org.springframework.context.annotation.Configuration;
4 | import org.springframework.web.servlet.config.annotation.EnableWebMvc;
5 | import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
6 | import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
7 |
8 | /**
9 | * paastaDeliveryPipelineApi
10 | * paasta.delivery.pipeline.storage.api.config
11 | *
12 | * @author REX
13 | * @version 1.0
14 | * @since 6 / 7/2017
15 | */
16 | @Configuration
17 | @EnableWebMvc
18 | public class WebMvcConfig extends WebMvcConfigurerAdapter {
19 |
20 | @Override
21 | public void addResourceHandlers(ResourceHandlerRegistry registry) {
22 | registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
23 | }
24 |
25 | }
26 |
--------------------------------------------------------------------------------
/src/main/java/paasta/delivery/pipeline/storage/api/file/FileInfo.java:
--------------------------------------------------------------------------------
1 | package paasta.delivery.pipeline.storage.api.file;
2 |
3 | /**
4 | * Created by hrjin on 2017-06-13.
5 | */
6 | public class FileInfo {
7 | private String originalFileName;
8 | private String storedFileName;
9 | private String fileUrl;
10 | private String resultStatus;
11 |
12 | public String getOriginalFileName() {
13 | return originalFileName;
14 | }
15 |
16 | public void setOriginalFileName(String originalFileName) {
17 | this.originalFileName = originalFileName;
18 | }
19 |
20 | public String getStoredFileName() {
21 | return storedFileName;
22 | }
23 |
24 | public void setStoredFileName(String storedFileName) {
25 | this.storedFileName = storedFileName;
26 | }
27 |
28 | public String getFileUrl() {
29 | return fileUrl;
30 | }
31 |
32 | public void setFileUrl(String fileUrl) {
33 | this.fileUrl = fileUrl;
34 | }
35 |
36 | public String getResultStatus() {
37 | return resultStatus;
38 | }
39 |
40 | public void setResultStatus(String resultStatus) {
41 | this.resultStatus = resultStatus;
42 | }
43 |
44 | }
45 |
--------------------------------------------------------------------------------
/src/main/resources/logback-spring.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | true
7 |
8 |
9 | applicatoin.%d{yyyy-MM-dd}.log
10 | 30
11 |
12 |
13 | INFO
14 |
15 |
16 |
17 | %d{yyyy:MM:dd HH:mm:ss.SSS} %-5level --- [%thread] %logger{35} : %msg %n
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/src/main/resources/application.yml:
--------------------------------------------------------------------------------
1 | spring:
2 | application:
3 | name: paasta-delivery-pipeline-binary-storage-api
4 | http:
5 | multipart:
6 | maxFileSize: 1000Mb
7 | maxRequestSize: 1000Mb
8 |
9 | ---
10 | spring:
11 | profiles:
12 | active: local
13 |
14 | server:
15 | port: {SERVER-PORT}
16 |
17 | logging:
18 | level:
19 | ROOT: INFO
20 | path: classpath:logback-spring.xml
21 | file: logs/application.log
22 |
23 | commonApi:
24 | url: COMMOM-API-URL
25 | authorization:
26 | id: COMMOM-API-AUTHORIZATION-ID
27 | password: COMMOM-API-AUTHORIZATION-PASSWORD
28 |
29 | objectStorage:
30 | tenantName: OBJECT-STORAGE-TENANT-NAME
31 | username: OBJECT-STORAGE-USER-NAME
32 | password: OBJECT-STORAGE-PASSWORD
33 | container: OBJECT-STORAGE-CONTAINER
34 | authUrl: OBJECT-STORAGE-AUTH-URL
35 |
36 | ---
37 | spring:
38 | profiles: dev
39 |
40 | logging:
41 | level:
42 | ROOT: DEBUG
43 | path: classpath:logback-spring.xml
44 | file: logs/application.log
45 |
46 | server:
47 | port: {SERVER-PORT}
48 |
49 | commonApi:
50 | url: COMMOM-API-URL
51 | authorization:
52 | id: COMMOM-API-AUTHORIZATION-ID
53 | password: COMMOM-API-AUTHORIZATION-PASSWORD
54 |
55 | objectStorage:
56 | tenantName: OBJECT-STORAGE-TENANT-NAME
57 | username: OBJECT-STORAGE-USER-NAME
58 | password: OBJECT-STORAGE-PASSWORD
59 | container: OBJECT-STORAGE-CONTAINER
60 | authUrl: OBJECT-STORAGE-AUTH-URL
61 |
--------------------------------------------------------------------------------
/src/main/java/paasta/delivery/pipeline/storage/api/file/FileController.java:
--------------------------------------------------------------------------------
1 | package paasta.delivery.pipeline.storage.api.file;
2 |
3 | import org.springframework.beans.factory.annotation.Autowired;
4 | import org.springframework.web.bind.annotation.*;
5 | import org.springframework.web.multipart.MultipartFile;
6 |
7 | import java.io.IOException;
8 |
9 | /**
10 | * Created by hrjin on 2017-06-12.
11 | */
12 | @RestController
13 | @RequestMapping(value = "/file")
14 | public class FileController {
15 |
16 | private final FileService fileService;
17 |
18 | /**
19 | * Instantiates a new File controller.
20 | *
21 | * @param fileService the file service
22 | */
23 | @Autowired
24 | public FileController(FileService fileService) {this.fileService = fileService;}
25 |
26 |
27 | /**
28 | * Upload file file info.
29 | *
30 | * @param multipartFile the multipart file
31 | * @return the file info
32 | * @throws IOException the io exception
33 | */
34 | @RequestMapping(value = {"/uploadFile"}, method = RequestMethod.POST)
35 | @ResponseBody
36 | public FileInfo uploadFile(@RequestParam("file") MultipartFile multipartFile) throws IOException {
37 | return fileService.upload(multipartFile);
38 | }
39 |
40 |
41 | /**
42 | * Delete file string.
43 | *
44 | * @param fileInfo the file info
45 | * @return the string
46 | */
47 | @RequestMapping(value = {"/fileDelete"}, method = RequestMethod.POST)
48 | @ResponseBody
49 | public String deleteFile(@RequestBody FileInfo fileInfo) {
50 | return fileService.deleteFile(fileInfo);
51 | }
52 |
53 | }
54 |
--------------------------------------------------------------------------------
/src/main/java/paasta/delivery/pipeline/storage/api/config/SwiftOsConfig.java:
--------------------------------------------------------------------------------
1 | package paasta.delivery.pipeline.storage.api.config;
2 |
3 | import org.javaswift.joss.client.factory.AccountConfig;
4 | import org.javaswift.joss.client.factory.AccountFactory;
5 | import org.javaswift.joss.client.factory.AuthenticationMethod;
6 | import org.javaswift.joss.model.Account;
7 | import org.javaswift.joss.model.Container;
8 | import org.springframework.beans.factory.annotation.Autowired;
9 | import org.springframework.context.annotation.Bean;
10 | import org.springframework.context.annotation.Configuration;
11 | import org.springframework.core.env.Environment;
12 |
13 | /**
14 | * Created by hrjin on 2017-06-12.
15 | */
16 | @Configuration
17 | public class SwiftOsConfig {
18 |
19 | @Autowired
20 | private Environment env;
21 |
22 | @Bean
23 | public AccountConfig accountConfig(){
24 |
25 | String tenantName = env.getRequiredProperty("objectStorage.tenantName");
26 | String username = env.getRequiredProperty("objectStorage.username");
27 | String password = env.getRequiredProperty("objectStorage.password");
28 | String authUrl = env.getRequiredProperty("objectStorage.authUrl");
29 |
30 | AccountConfig config = new AccountConfig();
31 | config.setTenantName(tenantName);
32 | config.setUsername(username);
33 | config.setPassword(password);
34 | config.setAuthUrl(authUrl + "/tokens");
35 | config.setAuthenticationMethod(AuthenticationMethod.KEYSTONE_V3);
36 | config.setPreferredRegion("paasta");
37 |
38 | return config;
39 | }
40 |
41 | @Bean
42 | public AccountFactory accountFactory(AccountConfig accountConfig){
43 | return new AccountFactory(accountConfig);
44 | }
45 |
46 | @Bean
47 | public Account account(AccountFactory accountFactory){
48 | return accountFactory.createAccount();
49 | }
50 |
51 | @Bean
52 | public Container container(Account account){
53 | String containerName = env.getRequiredProperty("objectStorage.container");
54 |
55 | Container container = account.getContainer(containerName);
56 | if(!container.exists()){
57 | container.create();
58 | container.makePublic();
59 | }
60 | return container;
61 | }
62 | }
63 |
--------------------------------------------------------------------------------
/gradlew.bat:
--------------------------------------------------------------------------------
1 | @if "%DEBUG%" == "" @echo off
2 | @rem ##########################################################################
3 | @rem
4 | @rem Gradle startup script for Windows
5 | @rem
6 | @rem ##########################################################################
7 |
8 | @rem Set local scope for the variables with windows NT shell
9 | if "%OS%"=="Windows_NT" setlocal
10 |
11 | set DIRNAME=%~dp0
12 | if "%DIRNAME%" == "" set DIRNAME=.
13 | set APP_BASE_NAME=%~n0
14 | set APP_HOME=%DIRNAME%
15 |
16 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
17 | set DEFAULT_JVM_OPTS=
18 |
19 | @rem Find java.exe
20 | if defined JAVA_HOME goto findJavaFromJavaHome
21 |
22 | set JAVA_EXE=java.exe
23 | %JAVA_EXE% -version >NUL 2>&1
24 | if "%ERRORLEVEL%" == "0" goto init
25 |
26 | echo.
27 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
28 | echo.
29 | echo Please set the JAVA_HOME variable in your environment to match the
30 | echo location of your Java installation.
31 |
32 | goto fail
33 |
34 | :findJavaFromJavaHome
35 | set JAVA_HOME=%JAVA_HOME:"=%
36 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe
37 |
38 | if exist "%JAVA_EXE%" goto init
39 |
40 | echo.
41 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
42 | echo.
43 | echo Please set the JAVA_HOME variable in your environment to match the
44 | echo location of your Java installation.
45 |
46 | goto fail
47 |
48 | :init
49 | @rem Get command-line arguments, handling Windows variants
50 |
51 | if not "%OS%" == "Windows_NT" goto win9xME_args
52 |
53 | :win9xME_args
54 | @rem Slurp the command line arguments.
55 | set CMD_LINE_ARGS=
56 | set _SKIP=2
57 |
58 | :win9xME_args_slurp
59 | if "x%~1" == "x" goto execute
60 |
61 | set CMD_LINE_ARGS=%*
62 |
63 | :execute
64 | @rem Setup the command line
65 |
66 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
67 |
68 | @rem Execute Gradle
69 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
70 |
71 | :end
72 | @rem End local scope for the variables with windows NT shell
73 | if "%ERRORLEVEL%"=="0" goto mainEnd
74 |
75 | :fail
76 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
77 | rem the _cmd.exe /c_ return code!
78 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
79 | exit /b 1
80 |
81 | :mainEnd
82 | if "%OS%"=="Windows_NT" endlocal
83 |
84 | :omega
85 |
--------------------------------------------------------------------------------
/src/test/java/paasta/delivery/pipeline/storage/api/file/FileServiceTest.java:
--------------------------------------------------------------------------------
1 | package paasta.delivery.pipeline.storage.api.file;
2 |
3 | import org.apache.commons.io.IOUtils;
4 | import org.junit.*;
5 | import org.junit.runner.RunWith;
6 | import org.junit.runners.MethodSorters;
7 | import org.springframework.beans.factory.annotation.Autowired;
8 | import org.springframework.boot.test.context.SpringBootTest;
9 | import org.springframework.mock.web.MockMultipartFile;
10 | import org.springframework.test.context.junit4.SpringRunner;
11 | import paasta.delivery.pipeline.storage.api.common.Constants;
12 |
13 | import java.io.File;
14 | import java.io.FileInputStream;
15 |
16 | /**
17 | * deliveryPipelineApi
18 | * paasta.delivery.pipeline.storage.api.file
19 | *
20 | * @author REX
21 | * @version 1.0
22 | * @since 10/30/2017
23 | */
24 | @RunWith(SpringRunner.class)
25 | @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
26 | @FixMethodOrder(MethodSorters.NAME_ASCENDING)
27 | public class FileServiceTest {
28 |
29 | @Autowired
30 | private FileService fileService;
31 |
32 |
33 | @Before
34 | public void setUp() throws Exception {
35 | }
36 |
37 | @After
38 | public void tearDown() throws Exception {
39 | }
40 |
41 |
42 | ////////////////////////////////////////////////////////////////////////////////////////////////////
43 | //////////////////// MethodName_StateUnderTest_ExpectedBehavior
44 | ////////////////////////////////////////////////////////////////////////////////////////////////////
45 |
46 |
47 | @Test
48 | public void upload_delete_ValidModel_ReturnModel() throws Exception {
49 | File file = new File("./src/main/resources/logback-spring.xml");
50 | FileInputStream input = new FileInputStream(file);
51 | MockMultipartFile multipartFile = new MockMultipartFile("file", file.getName(), "text/plain", IOUtils.toByteArray(input));
52 |
53 |
54 | // TEST :; UPLOAD FILE
55 | FileInfo resultModel = fileService.upload(multipartFile);
56 |
57 | Assert.assertNotNull(resultModel.getOriginalFileName());
58 | Assert.assertNotNull(resultModel.getFileUrl());
59 | Assert.assertNotNull(resultModel.getOriginalFileName());
60 | Assert.assertEquals(Constants.RESULT_STATUS_SUCCESS, resultModel.getResultStatus());
61 |
62 |
63 | FileInfo testDeleteFile = new FileInfo();
64 | testDeleteFile.setStoredFileName(resultModel.getStoredFileName());
65 |
66 |
67 | // TEST :; DELETE FILE
68 | String result = fileService.deleteFile(testDeleteFile);
69 |
70 | Assert.assertEquals(result, Constants.RESULT_STATUS_SUCCESS);
71 | }
72 |
73 | }
74 |
--------------------------------------------------------------------------------
/src/main/java/paasta/delivery/pipeline/storage/api/file/FileService.java:
--------------------------------------------------------------------------------
1 | package paasta.delivery.pipeline.storage.api.file;
2 |
3 | import org.javaswift.joss.model.Container;
4 | import org.javaswift.joss.model.StoredObject;
5 | import org.slf4j.Logger;
6 | import org.slf4j.LoggerFactory;
7 | import org.springframework.beans.factory.annotation.Autowired;
8 | import org.springframework.stereotype.Service;
9 | import org.springframework.web.multipart.MultipartFile;
10 | import paasta.delivery.pipeline.storage.api.common.Constants;
11 |
12 | import java.io.IOException;
13 | import java.util.UUID;
14 |
15 | /**
16 | * Created by hrjin on 2017-06-12.
17 | */
18 | @Service
19 | public class FileService {
20 |
21 | private static final Logger LOGGER = LoggerFactory.getLogger(FileService.class);
22 |
23 | private final Container container;
24 |
25 | /**
26 | * Instantiates a new File service.
27 | *
28 | * @param container the container
29 | */
30 | @Autowired
31 | public FileService(Container container) {this.container = container;}
32 |
33 |
34 | /**
35 | * Upload file info.
36 | *
37 | * @param multipartFile the multipart file
38 | * @return the file info
39 | * @throws IOException the io exception
40 | */
41 | FileInfo upload(MultipartFile multipartFile) throws IOException {
42 | String originalFileName = multipartFile.getOriginalFilename();
43 | String uuid = UUID.randomUUID().toString().replace("-", "");
44 | String storedFileName = uuid + originalFileName.substring(originalFileName.lastIndexOf('.'));
45 | StoredObject object = container.getObject(storedFileName);
46 |
47 | LOGGER.info("UPLOAD :: object ::: {}", object);
48 | LOGGER.info("UPLOAD :: url ::: {}", object.getPublicURL());
49 |
50 | object.uploadObject(multipartFile.getInputStream());
51 |
52 | FileInfo fileInfo = new FileInfo();
53 | fileInfo.setOriginalFileName(originalFileName);
54 | fileInfo.setStoredFileName(storedFileName);
55 | fileInfo.setFileUrl(object.getPublicURL());
56 | fileInfo.setResultStatus(Constants.RESULT_STATUS_SUCCESS);
57 |
58 | return fileInfo;
59 | }
60 |
61 |
62 | /**
63 | * Delete file.
64 | *
65 | * @param deleteFile the delete file
66 | */
67 | String deleteFile(FileInfo deleteFile) {
68 |
69 | String storedFileName = deleteFile.getStoredFileName();
70 | StoredObject object = container.getObject(storedFileName);
71 |
72 | LOGGER.info("DELETE :: storedFileName ::: {}", storedFileName);
73 | LOGGER.info("DELETE :: object ::: {}", object);
74 |
75 | object.delete();
76 |
77 | return Constants.RESULT_STATUS_SUCCESS;
78 | }
79 | }
80 |
--------------------------------------------------------------------------------
/src/main/java/paasta/delivery/pipeline/storage/api/common/AspectService.java:
--------------------------------------------------------------------------------
1 | package paasta.delivery.pipeline.storage.api.common;
2 |
3 | import org.aspectj.lang.JoinPoint;
4 | import org.aspectj.lang.annotation.Aspect;
5 | import org.aspectj.lang.annotation.Before;
6 | import org.slf4j.Logger;
7 | import org.slf4j.LoggerFactory;
8 | import org.springframework.stereotype.Service;
9 | import org.springframework.web.context.request.RequestContextHolder;
10 | import org.springframework.web.context.request.ServletRequestAttributes;
11 |
12 | import javax.servlet.http.HttpServletRequest;
13 | import java.util.Arrays;
14 | import java.util.Enumeration;
15 |
16 | /**
17 | * paastaDeliveryPipelineApi
18 | * paasta.delivery.pipeline.storage.api.common
19 | *
20 | * @author REX
21 | * @version 1.0
22 | * @since 6 / 7/2017
23 | */
24 | @Aspect
25 | @Service
26 | public class AspectService {
27 |
28 | private static final Logger LOGGER = LoggerFactory.getLogger(AspectService.class);
29 |
30 |
31 | /**
32 | * On before log service access.
33 | *
34 | * @param joinPoint the join point
35 | */
36 | @Before("execution(* paasta.delivery..*Service.*(..))")
37 | public void onBeforeLogServiceAccess(JoinPoint joinPoint) {
38 | LOGGER.warn("######## ON BEFORE SERVICE ACCESS :: {}", joinPoint);
39 | }
40 |
41 |
42 | /**
43 | * On before log controller access.
44 | *
45 | * @param joinPoint the join point
46 | */
47 | @Before("execution(public * paasta.delivery..*Controller.*(..))")
48 | public void onBeforeLogControllerAccess(JoinPoint joinPoint) {
49 | LOGGER.warn("#### ON BEFORE CONTROLLER ACCESS :: {}", joinPoint);
50 | HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
51 |
52 | LOGGER.warn("## Entering in Method: {}", joinPoint.getSignature().getName());
53 | LOGGER.warn("## Class Name: {}", joinPoint.getSignature().getDeclaringTypeName());
54 | LOGGER.warn("## Arguments: {}", Arrays.toString(joinPoint.getArgs()));
55 | LOGGER.warn("## Target class: {}", joinPoint.getTarget().getClass().getName());
56 |
57 | if (null != request) {
58 | LOGGER.warn("## Request Path info: {}", request.getServletPath());
59 | LOGGER.warn("## Method Type: {}", request.getMethod());
60 | LOGGER.warn("================================================================================");
61 | LOGGER.warn("Start Header Section of request");
62 | Enumeration headerNames = request.getHeaderNames();
63 | while (headerNames.hasMoreElements()) {
64 | String headerName = (String) headerNames.nextElement();
65 | String headerValue = request.getHeader(headerName);
66 | LOGGER.warn(" Header Name: {} || Header Value: {}", headerName, headerValue);
67 | }
68 | LOGGER.warn("End Header Section of request");
69 | LOGGER.warn("================================================================================");
70 | }
71 | }
72 |
73 | }
74 |
--------------------------------------------------------------------------------
/src/main/java/paasta/delivery/pipeline/storage/api/common/RestTemplateService.java:
--------------------------------------------------------------------------------
1 | package paasta.delivery.pipeline.storage.api.common;
2 |
3 | import org.slf4j.Logger;
4 | import org.slf4j.LoggerFactory;
5 | import org.springframework.beans.factory.annotation.Autowired;
6 | import org.springframework.beans.factory.annotation.Value;
7 | import org.springframework.http.*;
8 | import org.springframework.stereotype.Service;
9 | import org.springframework.util.Base64Utils;
10 | import org.springframework.web.client.RestTemplate;
11 |
12 | import java.nio.charset.StandardCharsets;
13 |
14 | /**
15 | * paastaDeliveryPipelineApi
16 | * paasta.delivery.pipeline.storage.api.common
17 | *
18 | * @author REX
19 | * @version 1.0
20 | * @since 6 /21/2017
21 | */
22 | @Service
23 | public class RestTemplateService {
24 | private static final Logger LOGGER = LoggerFactory.getLogger(RestTemplateService.class);
25 | private static final String AUTHORIZATION_HEADER_KEY = "Authorization";
26 | private static final String CONTENT_TYPE = "Content-Type";
27 | private final RestTemplate restTemplate;
28 | private String base64Authorization;
29 | private String baseUrl;
30 |
31 | // COMMON API
32 | @Value("${commonApi.url}")
33 | private String commonApiUrl;
34 |
35 | @Value("${commonApi.authorization.id}")
36 | private String commonApiAuthorizationId;
37 |
38 | @Value("${commonApi.authorization.password}")
39 | private String commonApiAuthorizationPassword;
40 |
41 |
42 | /**
43 | * Instantiates a new Rest template service.
44 | *
45 | * @param restTemplate the rest template
46 | */
47 | @Autowired
48 | public RestTemplateService(RestTemplate restTemplate) {
49 | this.restTemplate = restTemplate;
50 | }
51 |
52 |
53 | /**
54 | * Send t.
55 | *
56 | * @param the type parameter
57 | * @param reqApi the req api
58 | * @param reqUrl the req url
59 | * @param httpMethod the http method
60 | * @param bodyObject the body object
61 | * @param responseType the response type
62 | * @return the t
63 | */
64 | public T send(String reqApi, String reqUrl, HttpMethod httpMethod, Object bodyObject, Class responseType) {
65 |
66 | setApiUrlAuthorization(reqApi);
67 |
68 | HttpHeaders reqHeaders = new HttpHeaders();
69 | reqHeaders.add(AUTHORIZATION_HEADER_KEY, base64Authorization);
70 | reqHeaders.add(CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE);
71 |
72 | HttpEntity