Skip to content
Snippets Groups Projects
Commit db8e66ad authored by Martin Lowe's avatar Martin Lowe :flag_ca:
Browse files

Fix issue with working groups loading after update

parent 31d48f9a
No related branches found
No related tags found
No related merge requests found
/*********************************************************************
* Copyright (c) 2022 Eclipse Foundation.
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
*
* Author: Martin Lowe <martin.lowe@eclipse-foundation.org>
*
* SPDX-License-Identifier: EPL-2.0
**********************************************************************/
package org.eclipsefoundation.adopters.api;
import java.util.List;
import javax.ws.rs.BeanParam;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import org.eclipse.microprofile.rest.client.inject.RegisterRestClient;
import org.eclipsefoundation.core.service.APIMiddleware.BaseAPIParameters;
@Path("working-groups/")
@Produces(MediaType.APPLICATION_JSON)
@RegisterRestClient(configKey = "wg-api")
public interface WorkingGroupsAPI {
@GET
public Response getAll(@BeanParam BaseAPIParameters baseParams, @QueryParam("status") List<String> statuses);
}
/**
* Copyright (c) 2021 Eclipse Foundation
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
*
* Author: Martin Lowe <martin.lowe@eclipse-foundation.org>
*
* SPDX-License-Identifier: EPL-2.0
*/
package org.eclipsefoundation.adopters.api.models;
import java.util.List;
import javax.annotation.Nullable;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder;
import com.google.auto.value.AutoValue;
/**
* JSON object for importing Working group JSON assets.
*
* @author Martin Lowe <martin.lowe@eclipse-foundation.org>
*/
@AutoValue
@JsonDeserialize(builder = AutoValue_WorkingGroup.Builder.class)
public abstract class WorkingGroup {
public abstract String getAlias();
public abstract String getTitle();
public abstract String getStatus();
public abstract String getLogo();
public abstract String getDescription();
public abstract String getParentOrganization();
public abstract WorkingGroupResources getResources();
public abstract List<WorkingGroupParticipationLevel> getLevels();
public static Builder builder() {
return new AutoValue_WorkingGroup.Builder();
}
@AutoValue.Builder
@JsonPOJOBuilder(withPrefix = "set")
public abstract static class Builder {
public abstract Builder setAlias(String alias);
public abstract Builder setTitle(String title);
public abstract Builder setStatus(String status);
public abstract Builder setLogo(String logo);
public abstract Builder setDescription(String description);
public abstract Builder setParentOrganization(String parentOrganization);
public abstract Builder setResources(WorkingGroupResources resources);
public abstract Builder setLevels(List<WorkingGroupParticipationLevel> levels);
public abstract WorkingGroup build();
}
@AutoValue
@JsonDeserialize(builder = AutoValue_WorkingGroup_WorkingGroupResources.Builder.class)
public abstract static class WorkingGroupResources {
public abstract String getCharter();
@JsonProperty("participation_agreements")
public abstract WorkingGroupParticipationAgreements getParticipationAgreements();
public abstract String getWebsite();
public abstract String getMembers();
public abstract String getSponsorship();
public abstract String getContactForm();
public static Builder builder() {
return new AutoValue_WorkingGroup_WorkingGroupResources.Builder();
}
@AutoValue.Builder
@JsonPOJOBuilder(withPrefix = "set")
public abstract static class Builder {
public abstract Builder setCharter(String charter);
public abstract Builder setParticipationAgreements(
WorkingGroupParticipationAgreements participationAgreements);
public abstract Builder setWebsite(String website);
public abstract Builder setMembers(String members);
public abstract Builder setSponsorship(String sponsorship);
public abstract Builder setContactForm(String contactForm);
public abstract WorkingGroupResources build();
}
}
@AutoValue
@JsonDeserialize(builder = AutoValue_WorkingGroup_WorkingGroupParticipationLevel.Builder.class)
public abstract static class WorkingGroupParticipationLevel {
public abstract String getRelation();
public abstract String getDescription();
public static Builder builder() {
return new AutoValue_WorkingGroup_WorkingGroupParticipationLevel.Builder();
}
@AutoValue.Builder
@JsonPOJOBuilder(withPrefix = "set")
public abstract static class Builder {
public abstract Builder setRelation(String relation);
public abstract Builder setDescription(String description);
public abstract WorkingGroupParticipationLevel build();
}
}
@AutoValue
@JsonDeserialize(builder = AutoValue_WorkingGroup_WorkingGroupParticipationAgreement.Builder.class)
public abstract static class WorkingGroupParticipationAgreement {
@JsonProperty("document_id")
public abstract String getDocumentId();
public abstract String getPdf();
public static Builder builder() {
return new AutoValue_WorkingGroup_WorkingGroupParticipationAgreement.Builder();
}
@AutoValue.Builder
@JsonPOJOBuilder(withPrefix = "set")
public abstract static class Builder {
public abstract Builder setDocumentId(String documentId);
public abstract Builder setPdf(String pdf);
public abstract WorkingGroupParticipationAgreement build();
}
}
@AutoValue
@JsonDeserialize(builder = AutoValue_WorkingGroup_WorkingGroupParticipationAgreements.Builder.class)
public abstract static class WorkingGroupParticipationAgreements {
@Nullable
public abstract WorkingGroupParticipationAgreement getIndividual();
@Nullable
public abstract WorkingGroupParticipationAgreement getOrganization();
public static Builder builder() {
return new AutoValue_WorkingGroup_WorkingGroupParticipationAgreements.Builder();
}
@AutoValue.Builder
@JsonPOJOBuilder(withPrefix = "set")
public abstract static class Builder {
public abstract Builder setIndividual(@Nullable WorkingGroupParticipationAgreement individual);
public abstract Builder setOrganization(@Nullable WorkingGroupParticipationAgreement organization);
public abstract WorkingGroupParticipationAgreements build();
}
}
}
/*********************************************************************
* Copyright (c) 2023 Eclipse Foundation.
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
*
* Author: Zachary Sabourin <zachary.sabourin@eclipse-foundation.org>
*
* SPDX-License-Identifier: EPL-2.0
**********************************************************************/
package org.eclipsefoundation.adopters.precaches;
import java.util.List;
import javax.enterprise.context.ApplicationScoped;
import javax.inject.Inject;
import javax.inject.Named;
import org.eclipse.microprofile.rest.client.inject.RestClient;
import org.eclipsefoundation.adopters.api.WorkingGroupsAPI;
import org.eclipsefoundation.adopters.api.models.WorkingGroup;
import org.eclipsefoundation.core.model.ParameterizedCacheKey;
import org.eclipsefoundation.core.service.APIMiddleware;
import org.eclipsefoundation.core.service.LoadingCacheManager.LoadingCacheProvider;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Named("working-groups")
@ApplicationScoped
public class WorkingGroupPrecacheProvider implements LoadingCacheProvider<WorkingGroup> {
private static final Logger LOGGER = LoggerFactory.getLogger(WorkingGroupPrecacheProvider.class);
@RestClient
WorkingGroupsAPI api;
@Inject
APIMiddleware middleware;
@Override
public List<WorkingGroup> fetchData(ParameterizedCacheKey k) {
LOGGER.debug("LOADING PROJECTS WITH KEY: {}", k);
return middleware.getAll(params -> api.getAll(params, null), WorkingGroup.class);
}
@Override
public Class<WorkingGroup> getType() {
return WorkingGroup.class;
}
}
......@@ -14,6 +14,7 @@ package org.eclipsefoundation.adopters.resource;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
import javax.inject.Inject;
......@@ -26,14 +27,14 @@ import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import org.eclipsefoundation.adopters.api.models.WorkingGroup;
import org.eclipsefoundation.adopters.model.AdoptedProject;
import org.eclipsefoundation.adopters.model.Breadcrumb;
import org.eclipsefoundation.adopters.service.AdopterService;
import org.eclipsefoundation.adopters.service.WorkingGroupsService;
import org.eclipsefoundation.core.service.CachingService;
import org.eclipsefoundation.efservices.api.models.Project;
import org.eclipsefoundation.efservices.api.models.WorkingGroup;
import org.eclipsefoundation.efservices.services.ProjectService;
import org.eclipsefoundation.efservices.services.WorkingGroupService;
import io.quarkus.qute.Location;
import io.quarkus.qute.Template;
......@@ -61,7 +62,7 @@ public class AdoptersResource {
@Inject
AdopterService adopterService;
@Inject
WorkingGroupsService wgs;
WorkingGroupService wgs;
@Location("pages/project-adopters-wg")
Template adoptersWgTemplate;
......@@ -109,8 +110,8 @@ public class AdoptersResource {
@Path("project-adopters/{alias}")
public Response getWorkingGroupSubPage(@PathParam("alias") String workingGroupAlias) {
// retrieve the corresponding working group, or return an error
WorkingGroup currentWg = wgs.getByName(workingGroupAlias);
if (currentWg == null) {
Optional<WorkingGroup> currentWg = wgs.getByName(workingGroupAlias);
if (currentWg.isEmpty()) {
// a bit redundant, but attempt to get a cached error page or render a fresh copy
return Response
.ok(cache
......@@ -123,10 +124,10 @@ public class AdoptersResource {
.ok(cache
.get(workingGroupAlias, null, String.class,
() -> adoptersWgTemplate
.data("wg", currentWg)
.data("wg", currentWg.get())
.data(BREADCRUMB_TEMPLATE_PROPERTY,
new Breadcrumb("/adopters/project-adopters/" + workingGroupAlias,
currentWg.getTitle()))
currentWg.get().getTitle()))
.render())
.orElseGet(errorTemplate::render))
.build();
......
/**
* Copyright (c) 2021 Eclipse Foundation
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
*
* Author: Martin Lowe <martin.lowe@eclipse-foundation.org>
*
* SPDX-License-Identifier: EPL-2.0
*/
package org.eclipsefoundation.adopters.service;
import java.util.List;
import org.eclipsefoundation.adopters.api.models.WorkingGroup;
/**
* Defines a service that will return available working group data.
*
* @author Martin Lowe
*
*/
public interface WorkingGroupsService {
/**
* Returns all available working groups as a list.
*
* @return list of all working group definitions from the working group API
*/
public List<WorkingGroup> get();
/**
* Retrieves a single working group by its alias if available.
*
* @param name the alias of the working group to retrieve
* @return the working group with the given alias if available, or null.
*/
public WorkingGroup getByName(String name);
}
/**
* Copyright (c) 2021 Eclipse Foundation
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
*
* Author: Martin Lowe <martin.lowe@eclipse-foundation.org>
*
* SPDX-License-Identifier: EPL-2.0
*/
package org.eclipsefoundation.adopters.service.impl;
import java.util.ArrayList;
import java.util.List;
import javax.enterprise.context.ApplicationScoped;
import javax.inject.Inject;
import org.eclipsefoundation.adopters.api.models.WorkingGroup;
import org.eclipsefoundation.adopters.service.WorkingGroupsService;
import org.eclipsefoundation.core.model.ParameterizedCacheKey;
import org.eclipsefoundation.core.service.LoadingCacheManager;
/**
* Builds a list of working group definitions from an embedded list of working group definitions. This is an interim
* solution to accelerate this project and should be replaced with a call to the foundation API to retrieve this data.
*
* @author Martin Lowe
*/
@ApplicationScoped
public class DefaultWorkingGroupsService implements WorkingGroupsService {
@Inject
LoadingCacheManager cache;
@Override
public List<WorkingGroup> get() {
return new ArrayList<>(
cache.getList(ParameterizedCacheKey.builder().setId("all").setClazz(WorkingGroup.class).build()));
}
@Override
public WorkingGroup getByName(String name) {
return get().stream().filter(wg -> wg.getAlias().equalsIgnoreCase(name)).findFirst().orElse(null);
}
}
......@@ -3,6 +3,9 @@ quarkus.log.level=INFO
## CORS settings
quarkus.http.cors=false
%dev.eclipse.core.secure-key.override-key=test
%dev.eclipse.optional-resources.enabled=true
%dev.eclipse.cache.resource.enabled=true
## OIDC settings
quarkus.oidc.enabled=false
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment