SeecoderGitlabClient.java 39 KB

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