Skip to content

Commit

Permalink
Merge 08d074a into 6bd3613
Browse files Browse the repository at this point in the history
  • Loading branch information
William Welling committed Aug 3, 2022
2 parents 6bd3613 + 08d074a commit 76394e8
Show file tree
Hide file tree
Showing 58 changed files with 1,156 additions and 1,179 deletions.
57 changes: 52 additions & 5 deletions pom.xml
Expand Up @@ -81,13 +81,13 @@
<dependency>
<groupId>com.versionone</groupId>
<artifactId>VersionOne.SDK.Java.APIClient</artifactId>
<version>16.1.0</version>
<version>16.1.3</version>
</dependency>

<dependency>
<groupId>org.kohsuke</groupId>
<artifactId>github-api</artifactId>
<version>1.306</version>
<version>1.307</version>
</dependency>

<dependency>
Expand Down Expand Up @@ -120,20 +120,67 @@
</dependency>

<dependency>
<groupId>org.springframework.restdocs</groupId>
<artifactId>spring-restdocs-mockmvc</artifactId>
<scope>test</scope>
<groupId>org.springframework.restdocs</groupId>
<artifactId>spring-restdocs-mockmvc</artifactId>
<scope>test</scope>
</dependency>

<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>4.6.1</version>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>net.bytebuddy</groupId>
<artifactId>byte-buddy</artifactId>
</exclusion>
<exclusion>
<groupId>net.bytebuddy</groupId>
<artifactId>byte-buddy-agent</artifactId>
</exclusion>
</exclusions>
</dependency>

<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-junit-jupiter</artifactId>
<version>4.6.1</version>
<scope>test</scope>
</dependency>

<dependency>
<groupId>net.bytebuddy</groupId>
<artifactId>byte-buddy</artifactId>
<version>1.12.13</version>
<scope>test</scope>
</dependency>

<dependency>
<groupId>net.bytebuddy</groupId>
<artifactId>byte-buddy-agent</artifactId>
<version>1.12.13</version>
<scope>test</scope>
</dependency>

<dependency>
<groupId>com.infradna.tool</groupId>
<artifactId>bridge-method-annotation</artifactId>
<version>1.23</version>
<scope>test</scope>
</dependency>

<dependency>
<groupId>com.google.code.findbugs</groupId>
<artifactId>jsr305</artifactId>
<version>3.0.2</version>
<scope>test</scope>
</dependency>

<dependency>
<groupId>com.google.code.findbugs</groupId>
<artifactId>annotations</artifactId>
<version>3.0.1</version>
<scope>test</scope>
</dependency>

Expand Down
Expand Up @@ -25,7 +25,7 @@
@Service
public class ActiveSprintsScheduledCacheService extends AbstractProductScheduledCacheService<List<Sprint>, ActiveSprintsCache> {

private Logger logger = LoggerFactory.getLogger(this.getClass());
private static final Logger logger = LoggerFactory.getLogger(ActiveSprintsScheduledCacheService.class);

@Autowired
private ProductRepo productRepo;
Expand Down
Expand Up @@ -26,7 +26,7 @@
@Service
public class ProductsStatsScheduledCacheService extends AbstractProductScheduledCacheService<List<ProductStats>, ProductsStatsCache> {

private Logger logger = LoggerFactory.getLogger(this.getClass());
private static final Logger logger = LoggerFactory.getLogger(ProductsStatsScheduledCacheService.class);

@Autowired
private ProductRepo productRepo;
Expand Down
Expand Up @@ -24,7 +24,7 @@
@Service
public class RemoteProjectsScheduledCacheService extends AbstractScheduledCacheService<Map<Long, List<RemoteProject>>, RemoteProjectsCache> {

private Logger logger = LoggerFactory.getLogger(this.getClass());
private static final Logger logger = LoggerFactory.getLogger(RemoteProjectsScheduledCacheService.class);

@Autowired
private RemoteProjectManagerRepo remoteProjectManagerRepo;
Expand Down
4 changes: 2 additions & 2 deletions src/main/java/edu/tamu/app/controller/ProductController.java
Expand Up @@ -50,6 +50,8 @@
@RequestMapping("/products")
public class ProductController {

private static final Logger logger = LoggerFactory.getLogger(ProductController.class);

@Autowired
private ProductRepo productRepo;

Expand All @@ -68,8 +70,6 @@ public class ProductController {
@Autowired
private InternalRequestRepo internalRequestRepo;

private Logger logger = LoggerFactory.getLogger(this.getClass());

@GetMapping
@JsonView(ApiView.Partial.class)
@PreAuthorize("hasRole('ANONYMOUS')")
Expand Down
21 changes: 2 additions & 19 deletions src/main/java/edu/tamu/app/controller/RemoteProjectController.java
@@ -1,28 +1,11 @@
package edu.tamu.app.controller;

import static edu.tamu.weaver.response.ApiStatus.ERROR;
import static edu.tamu.weaver.response.ApiStatus.SUCCESS;

import java.util.HashMap;
import java.util.Map;
import java.util.Optional;

import edu.tamu.app.model.repo.ProductRepo;
import edu.tamu.app.service.registry.ManagementBeanRegistry;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import edu.tamu.app.cache.model.RemoteProject;
import edu.tamu.app.model.Product;
import edu.tamu.app.model.RemoteProjectInfo;
import edu.tamu.app.model.RemoteProjectManager;
import edu.tamu.app.model.repo.ProductRepo;
import edu.tamu.app.service.manager.RemoteProjectManagerBean;
import edu.tamu.app.service.registry.ManagementBeanRegistry;
import edu.tamu.weaver.response.ApiResponse;

@RestController
@RequestMapping("/projects/remote")
public class RemoteProjectController {
Expand Down
Expand Up @@ -30,14 +30,14 @@
@RequestMapping("/remote-project-manager")
public class RemoteProjectManagerController {

private static final Logger logger = LoggerFactory.getLogger(RemoteProjectManagerController.class);

@Autowired
private RemoteProjectManagerRepo remoteProjectManagerRepo;

@Autowired
private ProductRepo productRepo;

private Logger logger = LoggerFactory.getLogger(this.getClass());

@GetMapping
@PreAuthorize("hasRole('USER')")
public ApiResponse getAll() {
Expand Down
10 changes: 9 additions & 1 deletion src/main/java/edu/tamu/app/controller/StatusController.java
@@ -1,10 +1,13 @@
package edu.tamu.app.controller;

import static edu.tamu.weaver.response.ApiStatus.ERROR;
import static edu.tamu.weaver.response.ApiStatus.SUCCESS;
import static edu.tamu.weaver.validation.model.BusinessValidationType.CREATE;
import static edu.tamu.weaver.validation.model.BusinessValidationType.DELETE;
import static edu.tamu.weaver.validation.model.BusinessValidationType.UPDATE;

import java.util.Optional;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.DeleteMapping;
Expand Down Expand Up @@ -37,7 +40,12 @@ public ApiResponse read() {
@GetMapping("/{id}")
@PreAuthorize("hasRole('ANONYMOUS')")
public ApiResponse read(@PathVariable Long id) {
return new ApiResponse(SUCCESS, statusRepo.findById(id));
Optional<Status> status = statusRepo.findById(id);
if (status.isPresent()) {
return new ApiResponse(SUCCESS, status.get());
} else {
return new ApiResponse(ERROR, String.format("Status with id %d does not exist.", id));
}
}

@PostMapping
Expand Down
Expand Up @@ -16,7 +16,7 @@

public class RemoteProjectManagerRepoImpl extends AbstractWeaverRepoImpl<RemoteProjectManager, RemoteProjectManagerRepo> implements RemoteProjectManagerRepoCustom {

private Logger logger = LoggerFactory.getLogger(this.getClass());
private static final Logger logger = LoggerFactory.getLogger(RemoteProjectManagerRepoImpl.class);

@Autowired
private RemoteProjectManagerRepo remoteProjectManagerRepo;
Expand Down
Expand Up @@ -41,7 +41,7 @@

public abstract class AbstractGitHubService extends MappingRemoteProjectManagerBean {

protected Logger logger = LoggerFactory.getLogger(this.getClass());
protected static Logger logger = LoggerFactory.getLogger(AbstractGitHubService.class);

static final String ORGANIZATION = "TAMULib";
static final String SPRINT = "SPRINT";
Expand Down Expand Up @@ -129,24 +129,25 @@ GitHub getGitHubInstance() {
}

Member getMember(final GHUser user) throws IOException {
Member member;
final String memberId = String.valueOf(user.getId());
final Optional<Member> cachedMember = getCachedMember(memberId);

if (cachedMember.isPresent()) {
member = cachedMember.get();
} else {
final String name = StringUtils.isEmpty(user.getName()) ? user.getLogin() : user.getName();
final String avatarUrlString = user.getAvatarUrl();
final String avatarPath = getAvatarPath(avatarUrlString);
member = new Member(memberId, name, avatarPath);

final Optional<URL> avatarUrl = Optional.ofNullable(getClass().getResource("/images/" + avatarPath));
if (!avatarUrl.isPresent()) {
storeAvatar(avatarUrlString);
}
return cachedMember.get();
}

cacheMember(memberId, member);
final String name = StringUtils.isEmpty(user.getName()) ? user.getLogin() : user.getName();
final String avatarUrlString = user.getAvatarUrl();
final String avatarPath = getAvatarPath(avatarUrlString);
final Member member = new Member(memberId, name, avatarPath);
final Optional<URL> avatarUrl = Optional.ofNullable(getClass().getResource("/images/" + avatarPath));

if (!avatarUrl.isPresent()) {
storeAvatar(avatarUrlString);
}

cacheMember(memberId, member);

return member;
}

Expand Down Expand Up @@ -219,9 +220,12 @@ private String getAvatarPath(final String url) {
private void storeAvatar(final String avatarUrl) throws IOException {
final URL imagesPath = getClass().getResource("/images/");
final HttpHeaders headers = new HttpHeaders();

headers.setAccept(Arrays.asList(MediaType.APPLICATION_OCTET_STREAM));

final HttpEntity<String> entity = new HttpEntity<String>(headers);
final ResponseEntity<byte[]> response = restTemplate.exchange(avatarUrl, HttpMethod.GET, entity, byte[].class, "1");
final ResponseEntity<byte[]> response = restTemplate.exchange(avatarUrl, HttpMethod.GET, entity, byte[].class);

if (response.getStatusCode().equals(HttpStatus.OK)) {
final File file = new File(imagesPath.getFile() + getAvatarPath(avatarUrl));
Files.write(file.toPath(), response.getBody());
Expand Down
@@ -1,5 +1,9 @@
package edu.tamu.app.service.manager;

import edu.tamu.app.cache.model.Card;
import edu.tamu.app.cache.model.Sprint;
import edu.tamu.app.model.ManagementService;
import edu.tamu.app.model.ServiceType;
import java.io.IOException;
import java.util.List;
import java.util.Map;
Expand All @@ -8,21 +12,19 @@
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
import java.util.stream.Stream;

import org.apache.commons.lang3.tuple.Pair;
import org.kohsuke.github.GHMilestoneState;
import org.kohsuke.github.GHOrganization;
import org.kohsuke.github.GHProject;
import org.kohsuke.github.GHProject.ProjectStateFilter;
import org.kohsuke.github.GHRepository;

import edu.tamu.app.cache.model.Card;
import edu.tamu.app.cache.model.Sprint;
import edu.tamu.app.model.ManagementService;
import edu.tamu.app.model.ServiceType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class GitHubMilestoneService extends AbstractGitHubService {

protected static Logger logger = LoggerFactory.getLogger(GitHubMilestoneService.class);

public GitHubMilestoneService(final ManagementService managementService) {
super(managementService);
}
Expand All @@ -32,30 +34,29 @@ public List<Sprint> getActiveSprintsByScopeId(final String scopeId) throws Excep
logger.info("Fetching active sprints for remote project with scope id " + scopeId);
GHRepository repo = github.getRepositoryById(scopeId);
String productName = repo.getName();
return repo.listProjects(ProjectStateFilter.OPEN).asList().stream()
return repo.listProjects(ProjectStateFilter.OPEN).toList().stream()
.flatMap(project -> getActiveSprintsForProject(project, productName))
.collect(Collectors.toList());
}

@Override
public List<Sprint> getAdditionalActiveSprints() throws Exception {
GHOrganization organization = github.getOrganization(ORGANIZATION);
return organization.listProjects(ProjectStateFilter.OPEN).asList().stream()
return organization.listProjects(ProjectStateFilter.OPEN).toList().stream()
.flatMap(project -> getActiveSprintsForProject(project, toProductName(project)))
.collect(Collectors.toList());
}

private Stream<Sprint> getActiveSprintsForProject(GHProject project, String product) {
System.err.println("\n\n\nget: " + project + product + "\n\n\n");
AtomicInteger count = new AtomicInteger();
return exceptionHandlerWrapper(project, p -> getCards(p).entrySet()).stream()
.map(e -> new Sprint(String.format("%s-%s", project.getId(), count.incrementAndGet()), e.getKey(), product,
ServiceType.GITHUB_MILESTONE.toString(), e.getValue()));
}

private Map<String, List<Card>> getCards(GHProject project) throws IOException {
return project.listColumns().asList().stream()
.flatMap(column -> exceptionHandlerWrapper(column, c -> c.listCards().asList().stream()))
return project.listColumns().toList().stream()
.flatMap(column -> exceptionHandlerWrapper(column, c -> c.listCards().toList().stream()))
.map(card -> Pair.of(card, exceptionHandlerWrapper(card, c -> c.getContent())))
// Card without contents is a note
.filter(p -> Objects.nonNull(p.getValue()))
Expand Down

0 comments on commit 76394e8

Please sign in to comment.