1
0

SeecoderGitlabClient.java 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778
  1. package com.nju.edu.gitlab;
  2. import com.fasterxml.jackson.core.JsonProcessingException;
  3. import com.fasterxml.jackson.core.type.TypeReference;
  4. import com.fasterxml.jackson.databind.JsonNode;
  5. import com.fasterxml.jackson.databind.ObjectMapper;
  6. import com.nju.edu.gitlab.dto.*;
  7. import com.nju.edu.gitlab.dto.commit.CommitActionForm;
  8. import com.nju.edu.gitlab.dto.commit.CommitDTO;
  9. import com.nju.edu.gitlab.dto.member.AccessLevelForm;
  10. import com.nju.edu.gitlab.dto.member.GroupMemberDTO;
  11. import com.nju.edu.gitlab.dto.project.ProjectDTO;
  12. import com.nju.edu.gitlab.dto.project.VisibilityForm;
  13. import com.nju.edu.gitlab.vo.*;
  14. import com.nju.edu.gitlab.vo.commit.CommitVO;
  15. import org.gitlab4j.api.GitLabApiException;
  16. import org.gitlab4j.api.models.User;
  17. import org.slf4j.Logger;
  18. import org.slf4j.LoggerFactory;
  19. import okhttp3.*;
  20. import org.gitlab4j.api.models.AccessLevel;
  21. import org.gitlab4j.api.models.CommitAction;
  22. import org.gitlab4j.api.models.Visibility;
  23. import java.io.IOException;
  24. import java.util.ArrayList;
  25. import java.util.HashSet;
  26. import java.util.List;
  27. import java.util.Set;
  28. import java.util.concurrent.TimeUnit;
  29. import java.util.stream.Collectors;
  30. import static com.nju.edu.gitlab.SeecoderGitlabException.BIZ_ERROR_CODE;
  31. public class SeecoderGitlabClient implements SeecoderGitlabApi {
  32. private final Logger logger = LoggerFactory.getLogger(getClass());
  33. private OkHttpClient client;
  34. private String host;
  35. private String token;
  36. public SeecoderGitlabClient(String host, String token) {
  37. this.token = token;
  38. this.host = host;
  39. this.client = new OkHttpClient.Builder()
  40. .connectTimeout(60, TimeUnit.SECONDS)
  41. .writeTimeout(60, TimeUnit.SECONDS)
  42. .retryOnConnectionFailure(true)
  43. .build();
  44. }
  45. private <T> T processResponse(ObjectMapper objectMapper, Response response, TypeReference<T> typeReference) throws SeecoderGitlabException {
  46. try {
  47. validateResponseStatus(response);
  48. String body = response.body().string();
  49. JsonNode node = objectMapper.readTree(body);
  50. //todo 注释的代码和ResourceResponse字段对应不上,我先改成能用的形式,后续在修改
  51. // author: wph
  52. Integer err = Integer.parseInt(node.get("err").asText());
  53. if (err != 0) {
  54. String msg = node.get("msg").asText();
  55. throw new SeecoderGitlabException(BIZ_ERROR_CODE, msg);
  56. }
  57. if (typeReference == null) {
  58. return null;
  59. }
  60. if (node.get("res") != null)
  61. return objectMapper.readValue(node.get("res").traverse(), typeReference);
  62. else
  63. throw SeecoderGitlabException.NOT_FOUND_ERROR;
  64. } catch (IOException e) {
  65. logger.error("IOException", e);
  66. throw SeecoderGitlabException.IO_ERROR;
  67. }
  68. }
  69. private void validateResponseStatus(Response response) throws SeecoderGitlabException {
  70. if (response.code() == 403) {
  71. throw SeecoderGitlabException.UNAHTORIZATION_ERROR;
  72. } else if (response.code() == 500) {
  73. throw SeecoderGitlabException.INTERNAL_SERVER_ERROR;
  74. } else if (response.code() != 200) {
  75. throw SeecoderGitlabException.UNKNOWN_ERROR;
  76. }
  77. }
  78. @Override
  79. public GitlabUserVO createGitlabUser(int userId, String username, String password, String email) throws SeecoderGitlabException {
  80. try {
  81. ObjectMapper objectMapper = new ObjectMapper();
  82. Request.Builder builder = new Request.Builder()
  83. .addHeader("Authorization", token);
  84. GitlabUserDTO gitlabUserDTO = GitlabUserDTO.builder()
  85. .userId(userId)
  86. .email(email)
  87. .password(password)
  88. .username(username)
  89. .build();
  90. builder = builder
  91. .url(host + "/api/user/")
  92. .post(RequestBody.create(MediaType.parse("application/json; charset=utf-8"), objectMapper.writeValueAsString(gitlabUserDTO)));
  93. Request request = builder.build();
  94. final Call call = client.newCall(request);
  95. Response response = call.execute();
  96. GitlabUserVO gitlabUserVO = processResponse(objectMapper, response, new TypeReference<GitlabUserVO>() {
  97. });
  98. return gitlabUserVO;
  99. } catch (JsonProcessingException e) {
  100. logger.error("JSON writeValueAsString error", e);
  101. throw SeecoderGitlabException.JSON_ERROR;
  102. } catch (IOException e) {
  103. logger.error("IOException", e);
  104. throw SeecoderGitlabException.IO_ERROR;
  105. }
  106. }
  107. @Override
  108. public boolean changePassword(int userId, String password) throws SeecoderGitlabException {
  109. try {
  110. ObjectMapper objectMapper = new ObjectMapper();
  111. Request.Builder builder = new Request.Builder()
  112. .addHeader("Authorization", token);
  113. ChangePasswordDTO changePasswordDTO = ChangePasswordDTO.builder()
  114. .password(password)
  115. .userId(userId)
  116. .build();
  117. builder = builder
  118. .url(host + "/api/user/changePassword")
  119. .post(RequestBody.create(MediaType.parse("application/json; charset=utf-8"), objectMapper.writeValueAsString(changePasswordDTO)));
  120. Request request = builder.build();
  121. final Call call = client.newCall(request);
  122. Response response = call.execute();
  123. return processResponse(objectMapper, response, new TypeReference<Boolean>() {
  124. });
  125. } catch (JsonProcessingException e) {
  126. logger.error("JSON writeValueAsString error", e);
  127. throw SeecoderGitlabException.JSON_ERROR;
  128. } catch (IOException e) {
  129. logger.error("IOException", e);
  130. throw SeecoderGitlabException.IO_ERROR;
  131. }
  132. }
  133. @Override
  134. public boolean changeUserName(int userId, String password, String username) throws SeecoderGitlabException {
  135. try {
  136. ObjectMapper objectMapper = new ObjectMapper();
  137. Request.Builder builder = new Request.Builder()
  138. .addHeader("Authorization", token);
  139. ChangeUserNameDTO changeUserNameDTO = ChangeUserNameDTO.builder()
  140. .userId(userId)
  141. .username(username)
  142. .password(password)
  143. .build();
  144. builder = builder
  145. .url(host + "/api/user/changeUserName")
  146. .post(RequestBody.create(MediaType.parse("application/json; charset=utf-8"), objectMapper.writeValueAsString(changeUserNameDTO)));
  147. Request request = builder.build();
  148. final Call call = client.newCall(request);
  149. Response response = call.execute();
  150. return processResponse(objectMapper, response, new TypeReference<Boolean>() {
  151. });
  152. } catch (JsonProcessingException e) {
  153. logger.error("JSON writeValueAsString error", e);
  154. throw SeecoderGitlabException.JSON_ERROR;
  155. } catch (IOException e) {
  156. logger.error("IOException", e);
  157. throw SeecoderGitlabException.IO_ERROR;
  158. }
  159. }
  160. @Override
  161. public boolean deleteUser(int userId) throws SeecoderGitlabException {
  162. try {
  163. ObjectMapper objectMapper = new ObjectMapper();
  164. Request.Builder builder = new Request.Builder()
  165. .addHeader("Authorization", token);
  166. builder = builder
  167. .url(host + "/api/user/" + userId)
  168. .delete();
  169. Request request = builder.build();
  170. final Call call = client.newCall(request);
  171. Response response = call.execute();
  172. boolean isDeleted = processResponse(objectMapper, response, new TypeReference<Boolean>() {
  173. });
  174. return isDeleted;
  175. } catch (JsonProcessingException e) {
  176. logger.error("JSON writeValueAsString error", e);
  177. throw SeecoderGitlabException.JSON_ERROR;
  178. } catch (IOException e) {
  179. logger.error("IOException", e);
  180. throw SeecoderGitlabException.IO_ERROR;
  181. }
  182. }
  183. @Override
  184. public String getUserEmail(int userId) throws SeecoderGitlabException {
  185. try {
  186. ObjectMapper objectMapper = new ObjectMapper();
  187. Request.Builder builder = new Request.Builder()
  188. .addHeader("Authorization", token);
  189. builder = builder
  190. .url(host + "/api/user/" + userId + "/email")
  191. .get();
  192. Request request = builder.build();
  193. final Call call = client.newCall(request);
  194. Response response = call.execute();
  195. return processResponse(objectMapper, response, new TypeReference<String>() {
  196. });
  197. } catch (JsonProcessingException e) {
  198. logger.error("JSON writeValueAsString error", e);
  199. throw SeecoderGitlabException.JSON_ERROR;
  200. } catch (IOException e) {
  201. logger.error("IOException", e);
  202. throw SeecoderGitlabException.IO_ERROR;
  203. }
  204. }
  205. @Override
  206. public User getUserByUserName(String userName) throws SeecoderGitlabException {
  207. try {
  208. ObjectMapper objectMapper = new ObjectMapper();
  209. Request.Builder builder = new Request.Builder()
  210. .addHeader("Authorization", token);
  211. builder = builder
  212. .url(host + "/api/user/getByUserName?userName=" + userName)
  213. .get();
  214. Request request = builder.build();
  215. final Call call = client.newCall(request);
  216. Response response = call.execute();
  217. return processResponse(objectMapper, response, new TypeReference<User>() {
  218. });
  219. } catch (JsonProcessingException e) {
  220. logger.error("JSON writeValueAsString error", e);
  221. throw SeecoderGitlabException.JSON_ERROR;
  222. } catch (IOException e) {
  223. logger.error("IOException", e);
  224. throw SeecoderGitlabException.IO_ERROR;
  225. }
  226. }
  227. @Override
  228. public GitlabUserVO getUserByUserNameNew(String userName) throws SeecoderGitlabException {
  229. try {
  230. ObjectMapper objectMapper = new ObjectMapper();
  231. Request.Builder builder = new Request.Builder()
  232. .addHeader("Authorization", token);
  233. builder = builder
  234. .url(host + "/api/user/getByUserNameNew?userName=" + userName)
  235. .get();
  236. Request request = builder.build();
  237. final Call call = client.newCall(request);
  238. Response response = call.execute();
  239. return processResponse(objectMapper, response, new TypeReference<GitlabUserVO>() {
  240. });
  241. } catch (JsonProcessingException e) {
  242. logger.error("JSON writeValueAsString error", e);
  243. throw SeecoderGitlabException.JSON_ERROR;
  244. } catch (IOException e) {
  245. logger.error("IOException", e);
  246. throw SeecoderGitlabException.IO_ERROR;
  247. }
  248. }
  249. @Override
  250. public GitlabGroup createGroup(String groupName) throws SeecoderGitlabException {
  251. try {
  252. ObjectMapper objectMapper = new ObjectMapper();
  253. Request.Builder builder = new Request.Builder()
  254. .addHeader("Authorization", token);
  255. builder = builder
  256. .url(host + "/api/user")
  257. .post(RequestBody.create(MediaType.parse("application/json; charset=utf-8"), groupName));
  258. Request request = builder.build();
  259. final Call call = client.newCall(request);
  260. Response response = call.execute();
  261. GitlabGroup gitlabGroup = processResponse(objectMapper, response, new TypeReference<GitlabGroup>() {
  262. });
  263. return gitlabGroup;
  264. } catch (JsonProcessingException e) {
  265. logger.error("JSON writeValueAsString error", e);
  266. throw SeecoderGitlabException.JSON_ERROR;
  267. } catch (IOException e) {
  268. logger.error("IOException", e);
  269. throw SeecoderGitlabException.IO_ERROR;
  270. }
  271. }
  272. @Override
  273. public boolean addMember(int groupId, int userId, AccessLevelForm accessLevelForm) throws SeecoderGitlabException {
  274. try {
  275. ObjectMapper objectMapper = new ObjectMapper();
  276. Request.Builder builder = new Request.Builder()
  277. .addHeader("Authorization", token);
  278. AccessLevel accessLevel = AccessLevel.forValue(accessLevelForm.value);
  279. GroupMemberDTO groupMemberDTO = GroupMemberDTO.builder()
  280. .accessLevel(accessLevel)
  281. .userId(userId)
  282. .groupId(groupId)
  283. .build();
  284. builder = builder
  285. .url(host + "/api/group/addMember")
  286. .post(RequestBody.create(MediaType.parse("application/json; charset=utf-8"), objectMapper.writeValueAsString(groupMemberDTO)));
  287. Request request = builder.build();
  288. final Call call = client.newCall(request);
  289. Response response = call.execute();
  290. boolean isAdded = processResponse(objectMapper, response, new TypeReference<Boolean>() {
  291. });
  292. return isAdded;
  293. } catch (JsonProcessingException e) {
  294. logger.error("JSON writeValueAsString error", e);
  295. throw SeecoderGitlabException.JSON_ERROR;
  296. } catch (IOException e) {
  297. logger.error("IOException", e);
  298. throw SeecoderGitlabException.IO_ERROR;
  299. }
  300. }
  301. @Override
  302. public ProjectVO createProject(String projectName, VisibilityForm visibilityForm) throws SeecoderGitlabException {
  303. try {
  304. ObjectMapper objectMapper = new ObjectMapper();
  305. Request.Builder builder = new Request.Builder()
  306. .addHeader("Authorization", token);
  307. Visibility visibility = Visibility.valueOf(visibilityForm.toString());
  308. ProjectDTO projectDTO = ProjectDTO.builder()
  309. .projectName(projectName)
  310. .visibility(visibility)
  311. .build();
  312. builder = builder
  313. .url(host + "/api/project/")
  314. .post(RequestBody.create(MediaType.parse("application/json; charset=utf-8"), objectMapper.writeValueAsString(projectDTO)));
  315. Request request = builder.build();
  316. final Call call = client.newCall(request);
  317. Response response = call.execute();
  318. return processResponse(objectMapper, response, new TypeReference<ProjectVO>() {
  319. });
  320. } catch (JsonProcessingException e) {
  321. logger.error("JSON writeValueAsString error", e);
  322. throw SeecoderGitlabException.JSON_ERROR;
  323. } catch (IOException e) {
  324. logger.error("IOException", e);
  325. throw SeecoderGitlabException.IO_ERROR;
  326. }
  327. }
  328. @Override
  329. public ProjectVO createPrivateProject(String projectName, VisibilityForm visibilityForm, Integer userId) throws SeecoderGitlabException {
  330. try {
  331. ObjectMapper objectMapper = new ObjectMapper();
  332. Request.Builder builder = new Request.Builder()
  333. .addHeader("Authorization", token);
  334. Visibility visibility = Visibility.valueOf(visibilityForm.toString());
  335. ProjectDTO projectDTO = ProjectDTO.builder()
  336. .projectName(projectName)
  337. .visibility(visibility)
  338. .userId(userId)
  339. .build();
  340. builder = builder
  341. .url(host + "/api/project/private")
  342. .post(RequestBody.create(MediaType.parse("application/json; charset=utf-8"), objectMapper.writeValueAsString(projectDTO)));
  343. Request request = builder.build();
  344. final Call call = client.newCall(request);
  345. Response response = call.execute();
  346. return processResponse(objectMapper, response, new TypeReference<ProjectVO>() {
  347. });
  348. } catch (JsonProcessingException e) {
  349. logger.error("JSON writeValueAsString error", e);
  350. throw SeecoderGitlabException.JSON_ERROR;
  351. } catch (IOException e) {
  352. logger.error("IOException", e);
  353. throw SeecoderGitlabException.IO_ERROR;
  354. }
  355. }
  356. @Override
  357. public boolean deleteProject(int projectId) throws SeecoderGitlabException {
  358. try {
  359. ObjectMapper objectMapper = new ObjectMapper();
  360. Request.Builder builder = new Request.Builder()
  361. .addHeader("Authorization", token);
  362. builder = builder
  363. .url(host + "/api/project/" + projectId)
  364. .delete();
  365. Request request = builder.build();
  366. final Call call = client.newCall(request);
  367. Response response = call.execute();
  368. boolean isDeleted = processResponse(objectMapper, response, new TypeReference<Boolean>() {
  369. });
  370. return isDeleted;
  371. } catch (JsonProcessingException e) {
  372. logger.error("JSON writeValueAsString error", e);
  373. throw SeecoderGitlabException.JSON_ERROR;
  374. } catch (IOException e) {
  375. logger.error("IOException", e);
  376. throw SeecoderGitlabException.IO_ERROR;
  377. }
  378. }
  379. @Override
  380. public Integer forkProject(int projectId, int userId) throws SeecoderGitlabException {
  381. try {
  382. ObjectMapper objectMapper = new ObjectMapper();
  383. Request.Builder builder = new Request.Builder()
  384. .addHeader("Authorization", token);
  385. UserForkDTO userForkDTO = UserForkDTO.builder()
  386. .projectId(projectId)
  387. .userId(userId)
  388. .build();
  389. builder = builder
  390. .url(host + "/api/project/userFork")
  391. .post(RequestBody.create(MediaType.parse("application/json; charset=utf-8"), objectMapper.writeValueAsString(userForkDTO)));
  392. Request request = builder.build();
  393. final Call call = client.newCall(request);
  394. Response response = call.execute();
  395. projectId = processResponse(objectMapper, response, new TypeReference<Integer>() {
  396. });
  397. return projectId;
  398. } catch (JsonProcessingException e) {
  399. logger.error("JSON writeValueAsString error", e);
  400. throw SeecoderGitlabException.JSON_ERROR;
  401. } catch (IOException e) {
  402. logger.error("IOException", e);
  403. throw SeecoderGitlabException.IO_ERROR;
  404. }
  405. }
  406. @Override
  407. public Integer forkGroupProject(int projectId, int groupId) throws SeecoderGitlabException {
  408. try {
  409. ObjectMapper objectMapper = new ObjectMapper();
  410. Request.Builder builder = new Request.Builder()
  411. .addHeader("Authorization", token);
  412. GroupForkDTO groupForkDTO = GroupForkDTO.builder()
  413. .projectId(projectId)
  414. .groupId(groupId)
  415. .build();
  416. builder = builder
  417. .url(host + "/api/project/groupFork")
  418. .post(RequestBody.create(MediaType.parse("application/json; charset=utf-8"), objectMapper.writeValueAsString(groupForkDTO)));
  419. Request request = builder.build();
  420. final Call call = client.newCall(request);
  421. Response response = call.execute();
  422. projectId = processResponse(objectMapper, response, new TypeReference<Integer>() {
  423. });
  424. return projectId;
  425. } catch (JsonProcessingException e) {
  426. logger.error("JSON writeValueAsString error", e);
  427. throw SeecoderGitlabException.JSON_ERROR;
  428. } catch (IOException e) {
  429. logger.error("IOException", e);
  430. throw SeecoderGitlabException.IO_ERROR;
  431. }
  432. }
  433. @Override
  434. public Set<DiffVO> compare(int projectId, String fromBash, String toBash) throws SeecoderGitlabException {
  435. try {
  436. ObjectMapper objectMapper = new ObjectMapper();
  437. Request.Builder builder = new Request.Builder()
  438. .addHeader("Authorization", token);
  439. builder = builder
  440. .url(host + "/api/project/compare?projectId=" + projectId + "&fromBash=" + fromBash + "&toBash=" + toBash)
  441. .get();
  442. Request request = builder.build();
  443. final Call call = client.newCall(request);
  444. Response response = call.execute();
  445. Set<DiffVO> diffVOSet = new HashSet<>();
  446. diffVOSet = processResponse(objectMapper, response, new TypeReference<Set<DiffVO>>() {
  447. });
  448. return diffVOSet;
  449. } catch (JsonProcessingException e) {
  450. logger.error("JSON writeValueAsString error", e);
  451. throw SeecoderGitlabException.JSON_ERROR;
  452. } catch (IOException e) {
  453. logger.error("IOException", e);
  454. throw SeecoderGitlabException.IO_ERROR;
  455. }
  456. }
  457. @Override
  458. public boolean addWebHook(int projectId, String url, boolean doPushEvents, boolean doIssueEvents, boolean doMergeRequestsEvents) throws SeecoderGitlabException {
  459. try {
  460. ObjectMapper objectMapper = new ObjectMapper();
  461. Request.Builder builder = new Request.Builder()
  462. .addHeader("Authorization", token);
  463. WebHookDTO webHookDTO = WebHookDTO.builder()
  464. .projectId(projectId)
  465. .url(url)
  466. .doIssueEvents(doIssueEvents)
  467. .doPushEvents(doPushEvents)
  468. .doMergeRequestsEvents(doMergeRequestsEvents)
  469. .build();
  470. builder = builder
  471. .url(host + "/api/project/webhook")
  472. .post(RequestBody.create(MediaType.parse("application/json; charset=utf-8"), objectMapper.writeValueAsString(webHookDTO)));
  473. Request request = builder.build();
  474. final Call call = client.newCall(request);
  475. Response response = call.execute();
  476. return processResponse(objectMapper, response, new TypeReference<Boolean>() {
  477. });
  478. } catch (JsonProcessingException e) {
  479. logger.error("JSON writeValueAsString error", e);
  480. throw SeecoderGitlabException.JSON_ERROR;
  481. } catch (IOException e) {
  482. logger.error("IOException", e);
  483. throw SeecoderGitlabException.IO_ERROR;
  484. }
  485. }
  486. @Override
  487. public boolean archiveProject(int projectId) throws SeecoderGitlabException {
  488. try {
  489. ObjectMapper objectMapper = new ObjectMapper();
  490. Request.Builder builder = new Request.Builder()
  491. .addHeader("Authorization", token);
  492. builder = builder
  493. .url(host + "/api/project/archive")
  494. .post(RequestBody.create(MediaType.parse("application/json; charset=utf-8"), objectMapper.writeValueAsString(projectId)));
  495. Request request = builder.build();
  496. final Call call = client.newCall(request);
  497. Response response = call.execute();
  498. return processResponse(objectMapper, response, new TypeReference<Boolean>() {
  499. });
  500. } catch (JsonProcessingException e) {
  501. logger.error("JSON writeValueAsString error", e);
  502. throw SeecoderGitlabException.JSON_ERROR;
  503. } catch (IOException e) {
  504. logger.error("IOException", e);
  505. throw SeecoderGitlabException.IO_ERROR;
  506. }
  507. }
  508. @Override
  509. public String getProjectFile(int projectId, String branch, String path) throws SeecoderGitlabException {
  510. try {
  511. ObjectMapper objectMapper = new ObjectMapper();
  512. Request.Builder builder = new Request.Builder()
  513. .addHeader("Authorization", token);
  514. ProjectFileDTO projectFileDTO = ProjectFileDTO.builder()
  515. .path(path)
  516. .branch(branch)
  517. .build();
  518. builder = builder
  519. .url(host + "/api/project/" + projectId + "/getFile")
  520. .post(RequestBody.create(MediaType.parse("application/json; charset=utf-8"), objectMapper.writeValueAsString(projectFileDTO)));
  521. Request request = builder.build();
  522. final Call call = client.newCall(request);
  523. Response response = call.execute();
  524. return processResponse(objectMapper, response, new TypeReference<String>() {
  525. });
  526. } catch (JsonProcessingException e) {
  527. logger.error("JSON writeValueAsString error", e);
  528. throw SeecoderGitlabException.JSON_ERROR;
  529. } catch (IOException e) {
  530. logger.error("IOException", e);
  531. throw SeecoderGitlabException.IO_ERROR;
  532. }
  533. }
  534. @Override
  535. public String getProjectRawFile(int projectId, String commitOrBranchName, String path) throws SeecoderGitlabException {
  536. try {
  537. ObjectMapper objectMapper = new ObjectMapper();
  538. Request.Builder builder = new Request.Builder()
  539. .addHeader("Authorization", token);
  540. ProjectRawFileDTO projectFileDTO = ProjectRawFileDTO.builder()
  541. .commitOrBranchName(commitOrBranchName)
  542. .path(path)
  543. .build();
  544. builder = builder
  545. .url(host + "/api/project/" + projectId + "/getRawFile")
  546. .post(RequestBody.create(MediaType.parse("application/json; charset=utf-8"), objectMapper.writeValueAsString(projectFileDTO)));
  547. Request request = builder.build();
  548. final Call call = client.newCall(request);
  549. Response response = call.execute();
  550. return processResponse(objectMapper, response, new TypeReference<String>() {
  551. });
  552. } catch (JsonProcessingException e) {
  553. logger.error("JSON writeValueAsString error", e);
  554. throw SeecoderGitlabException.JSON_ERROR;
  555. } catch (IOException e) {
  556. logger.error("IOException", e);
  557. throw SeecoderGitlabException.IO_ERROR;
  558. }
  559. }
  560. @Override
  561. public CommitVO createCommit(int projectId, String branch, String commitMessage, String email, String username, List<CommitActionForm> actions) throws SeecoderGitlabException {
  562. try {
  563. ObjectMapper objectMapper = new ObjectMapper();
  564. Request.Builder builder = new Request.Builder()
  565. .addHeader("Authorization", token);
  566. List<CommitAction> actionList = actions.stream().map(action -> new CommitAction()
  567. .withAction(CommitAction.Action.forValue(action.getAction().toString()))
  568. .withEncoding(CommitAction.Encoding.forValue(action.getEncoding().toString()))
  569. .withFilePath(action.getFilepath())
  570. .withContent(action.getContent())).collect(Collectors.toList());
  571. CommitDTO commitDTO = CommitDTO.builder()
  572. .branch(branch)
  573. .commitMessage(commitMessage)
  574. .email(email)
  575. .username(username)
  576. .actions(actionList)
  577. .build();
  578. builder = builder
  579. .url(host + "/api/project/" + projectId + "/commit")
  580. .post(RequestBody.create(MediaType.parse("application/json; charset=utf-8"), objectMapper.writeValueAsString(commitDTO)));
  581. Request request = builder.build();
  582. final Call call = client.newCall(request);
  583. Response response = call.execute();
  584. return processResponse(objectMapper, response, new TypeReference<CommitVO>() {
  585. });
  586. } catch (JsonProcessingException e) {
  587. logger.error("JSON writeValueAsString error", e);
  588. throw SeecoderGitlabException.JSON_ERROR;
  589. } catch (IOException e) {
  590. logger.error("IOException", e);
  591. throw SeecoderGitlabException.IO_ERROR;
  592. }
  593. }
  594. @Override
  595. public List<CommitVO> getAllCommitMessage(int projectId, String commitHash) throws SeecoderGitlabException {
  596. try {
  597. ObjectMapper objectMapper = new ObjectMapper();
  598. Request.Builder builder = new Request.Builder()
  599. .addHeader("Authorization", token);
  600. builder = builder
  601. .url(host + "/api/project/" + projectId + "/commit/" + commitHash)
  602. .get();
  603. Request request = builder.build();
  604. final Call call = client.newCall(request);
  605. Response response = call.execute();
  606. List<CommitVO> commitVOList = new ArrayList<>();
  607. commitVOList = processResponse(objectMapper, response, new TypeReference<List<CommitVO>>() {
  608. });
  609. return commitVOList;
  610. } catch (JsonProcessingException e) {
  611. logger.error("JSON writeValueAsString error", e);
  612. throw SeecoderGitlabException.JSON_ERROR;
  613. } catch (IOException e) {
  614. logger.error("IOException", e);
  615. throw SeecoderGitlabException.IO_ERROR;
  616. }
  617. }
  618. @Override
  619. public List<BranchVO> getProjectBranches(int projectId) throws SeecoderGitlabException {
  620. try {
  621. ObjectMapper objectMapper = new ObjectMapper();
  622. Request.Builder builder = new Request.Builder()
  623. .addHeader("Authorization", token);
  624. builder = builder
  625. .url(host + "/api/project/" + projectId + "/branches")
  626. .get();
  627. Request request = builder.build();
  628. final Call call = client.newCall(request);
  629. Response response = call.execute();
  630. List<BranchVO> branchVOList = new ArrayList<>();
  631. branchVOList = processResponse(objectMapper, response, new TypeReference<List<BranchVO>>() {
  632. });
  633. return branchVOList;
  634. } catch (JsonProcessingException e) {
  635. logger.error("JSON writeValueAsString error", e);
  636. throw SeecoderGitlabException.JSON_ERROR;
  637. } catch (IOException e) {
  638. logger.error("IOException", e);
  639. throw SeecoderGitlabException.IO_ERROR;
  640. }
  641. }
  642. @Override
  643. public boolean addAuthorization(int projectId, int userId, AccessLevelForm accessLevelForm) throws GitLabApiException, SeecoderGitlabException {
  644. try {
  645. ObjectMapper objectMapper = new ObjectMapper();
  646. Request.Builder builder = new Request.Builder()
  647. .addHeader("Authorization", token);
  648. AccessLevel accessLevel = AccessLevel.forValue(accessLevelForm.value);
  649. UpdateMemberDTO updateMemberDTO = UpdateMemberDTO.builder()
  650. .accessLevel(accessLevel)
  651. .userId(userId)
  652. .projectId(projectId)
  653. .build();
  654. builder = builder
  655. .url(host + "/api/project/updateMember")
  656. .post(RequestBody.create(MediaType.parse("application/json; charset=utf-8"), objectMapper.writeValueAsString(updateMemberDTO)));
  657. Request request = builder.build();
  658. final Call call = client.newCall(request);
  659. Response response = call.execute();
  660. boolean isAdded = processResponse(objectMapper, response, new TypeReference<Boolean>() {
  661. });
  662. return isAdded;
  663. } catch (JsonProcessingException e) {
  664. logger.error("JSON writeValueAsString error", e);
  665. throw SeecoderGitlabException.JSON_ERROR;
  666. } catch (IOException e) {
  667. logger.error("IOException", e);
  668. throw SeecoderGitlabException.IO_ERROR;
  669. }
  670. }
  671. @Override
  672. public List<ProjectVO> getAllProjectsByUserId(int userId) throws SeecoderGitlabException {
  673. try {
  674. ObjectMapper objectMapper = new ObjectMapper();
  675. Request.Builder builder = new Request.Builder()
  676. .addHeader("Authorization", token);
  677. builder = builder
  678. .url(host + "/api/project/allProjects/" + userId)
  679. .get();
  680. Request request = builder.build();
  681. final Call call = client.newCall(request);
  682. Response response = call.execute();
  683. List<ProjectVO> projectVOList = new ArrayList<>();
  684. projectVOList = processResponse(objectMapper, response, new TypeReference<List<ProjectVO>>() {
  685. });
  686. return projectVOList;
  687. } catch (JsonProcessingException e) {
  688. logger.error("JSON writeValueAsString error", e);
  689. throw SeecoderGitlabException.JSON_ERROR;
  690. } catch (IOException e) {
  691. logger.error("IOException", e);
  692. throw SeecoderGitlabException.IO_ERROR;
  693. }
  694. }
  695. @Override
  696. public List<Integer> getJoinedUserByProject(int projectId) throws SeecoderGitlabException {
  697. try {
  698. ObjectMapper objectMapper = new ObjectMapper();
  699. Request.Builder builder = new Request.Builder()
  700. .addHeader("Authorization", token);
  701. builder = builder
  702. .url(host + "/api/project/projectMembers/" + projectId)
  703. .get();
  704. Request request = builder.build();
  705. final Call call = client.newCall(request);
  706. Response response = call.execute();
  707. List<Integer> userList = new ArrayList<>();
  708. userList = processResponse(objectMapper, response, new TypeReference<List<Integer>>() {
  709. });
  710. return userList;
  711. } catch (JsonProcessingException e) {
  712. logger.error("JSON writeValueAsString error", e);
  713. throw SeecoderGitlabException.JSON_ERROR;
  714. } catch (IOException e) {
  715. logger.error("IOException", e);
  716. throw SeecoderGitlabException.IO_ERROR;
  717. }
  718. }
  719. @Override
  720. public List<String> getFilePaths(int projectId, String basePath, String branch) throws SeecoderGitlabException {
  721. try {
  722. ObjectMapper objectMapper = new ObjectMapper();
  723. Request.Builder builder = new Request.Builder()
  724. .addHeader("Authorization", token);
  725. builder = builder
  726. .url(host + String.format("/api/project/filePaths?projectId=%d&&basePath=%s&&branch=%s", projectId, basePath, branch))
  727. .get();
  728. Request request = builder.build();
  729. final Call call = client.newCall(request);
  730. Response response = call.execute();
  731. return processResponse(objectMapper, response, new TypeReference<List<String>>() {
  732. });
  733. } catch (JsonProcessingException e) {
  734. logger.error("JSON writeValueAsString error", e);
  735. throw SeecoderGitlabException.JSON_ERROR;
  736. } catch (IOException e) {
  737. logger.error("IOException", e);
  738. throw SeecoderGitlabException.IO_ERROR;
  739. }
  740. }
  741. }