Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • eclipsefdn/it/api/eclipsefdn-project-adopters
  • malowe/eclipsefdn-project-adopters
  • rsoika/eclipsefdn-project-adopters
  • zacharysabourin/eclipsefdn-project-adopters
  • sbernard/eclipsefdn-project-adopters
  • hebbers/eclipsefdn-project-adopters
  • gadamsuwr/eclipsefdn-project-adopters
  • tellison/eclipsefdn-project-adopters
  • insafuhrmann/eclipsefdn-project-adopters-insafuhrmann
  • rajkumarthiagarajan/eclipsefdn-project-adopters
  • ekorkan/eclipsefdn-project-adopters
  • jfar/eclipsefdn-project-adopters
  • adriengooris/eclipsefdn-project-adopters
  • vivienjovet/eclipsefdn-project-adopters
14 results
Show changes
Commits on Source (74)
Showing
with 768 additions and 648 deletions
......@@ -18,7 +18,7 @@ The project maintains the following source code repositories
Before your contribution can be accepted by the project team contributors must
electronically sign the Eclipse Contributor Agreement (ECA).
* http://www.eclipse.org/legal/ECA.php
* http://www.eclipse.org/legal/eca/
Commits that are provided by non-committers must have a Signed-off-by field in
the footer indicating that the author is aware of the terms by which the
......
......@@ -175,6 +175,12 @@ pipeline {
agent {
label 'docker-build'
}
when {
anyOf {
environment name: 'ENVIRONMENT', value: 'production'
environment name: 'ENVIRONMENT', value: 'staging'
}
}
steps {
unstash name: "target"
sh '''
......
......@@ -9,24 +9,24 @@
<version>0.0.1</version>
<properties>
<compiler-plugin.version>3.11.0</compiler-plugin.version>
<compiler-plugin.version>3.13.0</compiler-plugin.version>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<quarkus.platform.artifact-id>quarkus-bom</quarkus.platform.artifact-id>
<quarkus.platform.group-id>io.quarkus.platform</quarkus.platform.group-id>
<quarkus.platform.version>3.2.11.Final</quarkus.platform.version>
<surefire-plugin.version>3.1.2</surefire-plugin.version>
<quarkus.platform.version>3.15.3.1</quarkus.platform.version>
<surefire-plugin.version>3.3.1</surefire-plugin.version>
<maven.compiler.parameters>true</maven.compiler.parameters>
<sonar.sources>src/main</sonar.sources>
<sonar.tests>src/test</sonar.tests>
<sonar.java.coveragePlugin>jacoco</sonar.java.coveragePlugin>
<sonar.dynamicAnalysis>reuseReports</sonar.dynamicAnalysis>
<sonar.jacoco.reportPaths>${project.build.directory}/jacoco-report</sonar.jacoco.reportPaths>
<sonar.coverage.jacoco.xmlReportPaths>${project.basedir}/target/jacoco-report/jacoco.xml</sonar.coverage.jacoco.xmlReportPaths>
<sonar.junit.reportPath>${project.build.directory}/surefire-reports</sonar.junit.reportPath>
<auto-value.version>1.10.4</auto-value.version>
<eclipse-api-version>0.9.5</eclipse-api-version>
<recordbuilder.version>42</recordbuilder.version>
<eclipse-api-version>1.2.1</eclipse-api-version>
<sonar.host.url>https://sonarcloud.io</sonar.host.url>
<sonar.organization>eclipse-foundation-it</sonar.organization>
<sonar.projectKey>eclipsefdn-project-adopters</sonar.projectKey>
......@@ -78,14 +78,13 @@
<artifactId>quarkus-efservices</artifactId>
<version>${eclipse-api-version}</version>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-resteasy-jackson</artifactId>
<artifactId>quarkus-rest-client-reactive</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-rest-client</artifactId>
<artifactId>quarkus-rest-client-reactive-jackson</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
......@@ -94,24 +93,14 @@
<artifactId>commons-io</artifactId>
</dependency>
<!--
Annotation preprocessors - reduce all of the boiler plate -->
<dependency>
<groupId>com.google.auto.value</groupId>
<artifactId>auto-value</artifactId>
<version>${auto-value.version}</version>
<groupId>io.soabase.record-builder</groupId>
<artifactId>record-builder-processor</artifactId>
<version>${recordbuilder.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.google.auto.value</groupId>
<artifactId>auto-value-annotations</artifactId>
<version>${auto-value.version}</version>
</dependency>
<dependency>
<groupId>com.google.code.findbugs</groupId>
<artifactId>jsr305</artifactId>
</dependency>
<!-- Testing dependencies only -->
<dependency>
<groupId>io.quarkus</groupId>
......@@ -122,6 +111,7 @@
<groupId>org.eclipsefoundation</groupId>
<artifactId>quarkus-test-common</artifactId>
<version>${eclipse-api-version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
......@@ -146,6 +136,18 @@
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<annotationProcessorPaths>
<path>
<groupId>io.soabase.record-builder</groupId>
<artifactId>record-builder-processor</artifactId>
<version>${recordbuilder.version}</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>${surefire-plugin.version}</version>
......
<?xml version="1.0"?>
<project
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>org.eclipsefoundation</groupId>
<artifactId>eclipsefdn-project-adopters</artifactId>
<version>0.0.1</version>
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>org.eclipsefoundation</groupId>
<artifactId>eclipsefdn-project-adopters</artifactId>
<version>0.0.1</version>
<properties>
<compiler-plugin.version>3.11.0</compiler-plugin.version>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<quarkus.platform.artifact-id>quarkus-bom</quarkus.platform.artifact-id>
<quarkus.platform.group-id>io.quarkus.platform</quarkus.platform.group-id>
<quarkus.platform.version>3.2.9.Final</quarkus.platform.version>
<surefire-plugin.version>3.1.2</surefire-plugin.version>
<maven.compiler.parameters>true</maven.compiler.parameters>
<sonar.sources>src/main</sonar.sources>
<sonar.tests>src/test</sonar.tests>
<sonar.java.coveragePlugin>jacoco</sonar.java.coveragePlugin>
<sonar.dynamicAnalysis>reuseReports</sonar.dynamicAnalysis>
<sonar.jacoco.reportPaths>${project.build.directory}/jacoco-report</sonar.jacoco.reportPaths>
<sonar.junit.reportPath>${project.build.directory}/surefire-reports</sonar.junit.reportPath>
<auto-value.version>1.10.4</auto-value.version>
<eclipse-api-version>0.9.4</eclipse-api-version>
</properties>
<properties>
<compiler-plugin.version>3.13.0</compiler-plugin.version>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<quarkus.platform.artifact-id>quarkus-bom</quarkus.platform.artifact-id>
<quarkus.platform.group-id>io.quarkus.platform</quarkus.platform.group-id>
<quarkus.platform.version>3.15.3</quarkus.platform.version>
<surefire-plugin.version>3.3.1</surefire-plugin.version>
<maven.compiler.parameters>true</maven.compiler.parameters>
<sonar.sources>src/main</sonar.sources>
<sonar.tests>src/test</sonar.tests>
<sonar.java.coveragePlugin>jacoco</sonar.java.coveragePlugin>
<sonar.dynamicAnalysis>reuseReports</sonar.dynamicAnalysis>
<sonar.coverage.jacoco.xmlReportPaths>${project.basedir}/target/jacoco-report/jacoco.xml</sonar.coverage.jacoco.xmlReportPaths>
<sonar.junit.reportPath>${project.build.directory}/surefire-reports</sonar.junit.reportPath>
<recordbuilder.version>42</recordbuilder.version>
<eclipse-api-version>1.2.0</eclipse-api-version>
<sonar.host.url>https://sonarcloud.io</sonar.host.url>
<sonar.organization>eclipse-foundation-it</sonar.organization>
<sonar.projectKey>eclipsefdn-project-adopters</sonar.projectKey>
<sonar.projectName>Eclipse Project Adopters</sonar.projectName>
</properties>
<repositories>
<repository>
<id>eclipsefdn</id>
<url>https://repo.eclipse.org/content/repositories/eclipsefdn/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>${quarkus.platform.group-id}</groupId>
<artifactId>${quarkus.platform.artifact-id}</artifactId>
<version>${quarkus.platform.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<repositories>
<repository>
<id>eclipsefdn</id>
<url>https://repo.eclipse.org/content/repositories/eclipsefdn/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.eclipsefoundation</groupId>
<artifactId>quarkus-core</artifactId>
<version>${eclipse-api-version}</version>
<!-- Can be removed once dependency is removed from base package
https://stackoverflow.com/questions/67510802/logging-in-quarkus-works-in-dev-mode-but-doesnt-output-in-jvm-docker-image -->
<exclusions>
<exclusion>
<groupId>org.jboss.logmanager</groupId>
<artifactId>jboss-logmanager</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.eclipsefoundation</groupId>
<artifactId>quarkus-efservices</artifactId>
<version>${eclipse-api-version}</version>
</dependency>
<dependency>
<groupId>${quarkus.platform.group-id}</groupId>
<artifactId>${quarkus.platform.artifact-id}</artifactId>
<version>${quarkus.platform.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-resteasy-jackson</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-rest-client</artifactId>
</dependency>
<dependencies>
<dependency>
<groupId>org.eclipsefoundation</groupId>
<artifactId>quarkus-core</artifactId>
<version>${eclipse-api-version}</version>
<!-- Can be removed once dependency is removed from base package
https://stackoverflow.com/questions/67510802/logging-in-quarkus-works-in-dev-mode-but-doesnt-output-in-jvm-docker-image -->
<exclusions>
<exclusion>
<groupId>org.jboss.logmanager</groupId>
<artifactId>jboss-logmanager</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
</dependency>
<dependency>
<groupId>org.eclipsefoundation</groupId>
<artifactId>quarkus-efservices</artifactId>
<version>${eclipse-api-version}</version>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-rest-client-reactive</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-rest-client-reactive-jackson</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
</dependency>
<!--
<!--
Annotation preprocessors - reduce all of the boiler plate -->
<dependency>
<groupId>com.google.auto.value</groupId>
<artifactId>auto-value</artifactId>
<version>${auto-value.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.google.auto.value</groupId>
<artifactId>auto-value-annotations</artifactId>
<version>${auto-value.version}</version>
</dependency>
<dependency>
<groupId>com.google.code.findbugs</groupId>
<artifactId>jsr305</artifactId>
</dependency>
<!-- Testing dependencies only -->
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-junit5</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.eclipsefoundation</groupId>
<artifactId>quarkus-test-common</artifactId>
<version>${eclipse-api-version}</version>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-jacoco</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>${quarkus.platform.group-id}</groupId>
<artifactId>quarkus-maven-plugin</artifactId>
<version>${quarkus.platform.version}</version>
<extensions>true</extensions>
<executions>
<execution>
<goals>
<goal>build</goal>
<goal>generate-code</goal>
<goal>generate-code-tests</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>${surefire-plugin.version}</version>
<configuration>
<systemPropertyVariables>
<java.util.logging.manager>
org.jboss.logmanager.LogManager</java.util.logging.manager>
<maven.home>${maven.home}</maven.home>
</systemPropertyVariables>
<includes>
<include>**/*Test.java</include>
</includes>
</configuration>
</plugin>
</plugins>
</build>
<profiles>
<profile>
<id>native</id>
<properties>
<quarkus.package.type>native</quarkus.package.type>
</properties>
<activation>
<property>
<name>native</name>
</property>
</activation>
</profile>
</profiles>
</project>
<dependency>
<groupId>io.soabase.record-builder</groupId>
<artifactId>record-builder-processor</artifactId>
<version>${recordbuilder.version}</version>
<scope>provided</scope>
</dependency>
<!-- Testing dependencies only -->
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-junit5</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.eclipsefoundation</groupId>
<artifactId>quarkus-test-common</artifactId>
<version>${eclipse-api-version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-jacoco</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>${quarkus.platform.group-id}</groupId>
<artifactId>quarkus-maven-plugin</artifactId>
<version>${quarkus.platform.version}</version>
<extensions>true</extensions>
<executions>
<execution>
<goals>
<goal>build</goal>
<goal>generate-code</goal>
<goal>generate-code-tests</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<annotationProcessorPaths>
<path>
<groupId>io.soabase.record-builder</groupId>
<artifactId>record-builder-processor</artifactId>
<version>${recordbuilder.version}</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>${surefire-plugin.version}</version>
<configuration>
<systemPropertyVariables>
<java.util.logging.manager>
org.jboss.logmanager.LogManager</java.util.logging.manager>
<maven.home>${maven.home}</maven.home>
</systemPropertyVariables>
<includes>
<include>**/*Test.java</include>
</includes>
</configuration>
</plugin>
</plugins>
</build>
<profiles>
<profile>
<id>native</id>
<properties>
<quarkus.package.type>native</quarkus.package.type>
</properties>
<activation>
<property>
<name>native</name>
</property>
</activation>
</profile>
</profiles>
</project>
\ No newline at end of file
......@@ -65,9 +65,18 @@ components:
$ref: "#/components/schemas/AdoptedProject"
AdoptedProject:
type: object
additionalProperties: false
required:
- adopters
- logo
- name
- project_id
- url
properties:
Adopters:
$ref: "#/components/schemas/Adopter"
adopters:
type: array
items:
$ref: "#/components/schemas/Adopter"
logo:
type: string
description: The URL containing the project logo.
......@@ -86,7 +95,19 @@ components:
$ref: "#/components/schemas/Adopter"
Adopter:
type: object
additionalProperties: false
required:
- projects
- homepage_url
- logo
- logo_white
- name
properties:
projects:
type: array
description: List of projects by their ID that the company adopts within a product
items:
type: string
homepage_url:
type: string
description: The URL containing the adopter's homepage.
......
......@@ -14,49 +14,15 @@ package org.eclipsefoundation.adopters.model;
import java.util.List;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder;
import com.google.auto.value.AutoValue;
import io.soabase.recordbuilder.core.RecordBuilder;
/**
* A project with information about its adopters (read from the file system)
* included with the object.
* A project with information about its adopters (read from the file system) included with the object.
*
* @author Martin Lowe
*
*/
@AutoValue
@JsonDeserialize(builder = AutoValue_AdoptedProject.Builder.class)
public abstract class AdoptedProject {
@RecordBuilder
public record AdoptedProject(String projectId, String name, String url, String logo, List<Adopter> adopters) {
public abstract String getProjectId();
public abstract String getName();
public abstract String getUrl();
public abstract String getLogo();
public abstract List<Adopter> getAdopters();
public static Builder builder() {
return new AutoValue_AdoptedProject.Builder();
}
@AutoValue.Builder
@JsonPOJOBuilder(withPrefix = "set")
public abstract static class Builder {
public abstract Builder setProjectId(String id);
public abstract Builder setName(String name);
public abstract Builder setUrl(String url);
public abstract Builder setLogo(String logo);
public abstract Builder setAdopters(List<Adopter> adopters);
public abstract AdoptedProject build();
}
}
......@@ -15,9 +15,8 @@ package org.eclipsefoundation.adopters.model;
import java.util.List;
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;
import io.soabase.recordbuilder.core.RecordBuilder;
/**
* Represents an adopter from the serialized adopter.json file.
......@@ -25,42 +24,8 @@ import com.google.auto.value.AutoValue;
* @author Martin Lowe
*
*/
@AutoValue
@JsonDeserialize(builder = AutoValue_Adopter.Builder.class)
public abstract class Adopter {
public abstract String getName();
@JsonProperty("homepage_url")
public abstract String getHomepageUrl();
public abstract String getLogo();
@JsonProperty("logo_white")
public abstract String getLogoWhite();
public abstract List<String> getProjects();
public static Builder builder() {
return new AutoValue_Adopter.Builder();
}
@AutoValue.Builder
@JsonPOJOBuilder(withPrefix = "set")
public abstract static class Builder {
public abstract Builder setName(String name);
@JsonProperty("homepage_url")
public abstract Builder setHomepageUrl(String url);
public abstract Builder setLogo(String logo);
@JsonProperty("logo_white")
public abstract Builder setLogoWhite(String logoWhite);
public abstract Builder setProjects(List<String> projects);
public abstract Adopter build();
@RecordBuilder
public record Adopter(String name, @JsonProperty("homepage_url") String homepageUrl, String logo,
@JsonProperty("logo_white") String logoWhite, List<String> projects) {
}
}
......@@ -14,31 +14,11 @@ package org.eclipsefoundation.adopters.model;
import java.util.List;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder;
import com.google.auto.value.AutoValue;
/**
* Root object for adopters.json serialized content.
*
* @author Martin Lowe
*
*/
@AutoValue
@JsonDeserialize(builder = AutoValue_AdopterList.Builder.class)
public abstract class AdopterList {
public abstract List<Adopter> getAdopters();
public static Builder builder() {
return new AutoValue_AdopterList.Builder();
}
@AutoValue.Builder
@JsonPOJOBuilder(withPrefix = "set")
public abstract static class Builder {
public abstract Builder setAdopters(List<Adopter> adopters);
public abstract AdopterList build();
}
public record AdopterList(List<Adopter> adopters) {
}
......@@ -21,14 +21,17 @@ import org.apache.commons.lang3.StringUtils;
import org.eclipsefoundation.adopters.model.AdoptedProject;
import org.eclipsefoundation.adopters.model.Breadcrumb;
import org.eclipsefoundation.adopters.service.AdopterService;
import org.eclipsefoundation.core.model.ParameterizedCacheKey;
import org.eclipsefoundation.core.service.CachingService;
import org.eclipsefoundation.core.service.LoadingCacheManager;
import org.eclipsefoundation.caching.model.ParameterizedCacheKeyBuilder;
import org.eclipsefoundation.caching.service.CachingService;
import org.eclipsefoundation.caching.service.LoadingCacheManager;
import org.eclipsefoundation.efservices.api.models.InterestGroup;
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 org.eclipsefoundation.http.namespace.CacheControlCommonValues;
import org.eclipsefoundation.utils.helper.TransformationHelper;
import org.jboss.resteasy.reactive.Cache;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
......@@ -84,15 +87,16 @@ public class AdoptersResource {
@GET
@Produces(MediaType.TEXT_HTML)
@Cache(maxAge = CacheControlCommonValues.AGGRESSIVE_CACHE_MAX_AGE)
public Response getHomePage() {
// Sort all Wgs alphabetically
List<WorkingGroup> workingGroups = wgs.get();
workingGroups.sort(Comparator.comparing(WorkingGroup::getTitle));
workingGroups.sort(Comparator.comparing(WorkingGroup::title));
return Response
.ok(cache
.get("homepage-html", null, String.class,
() -> homeTemplate.data("workingGroups", workingGroups).data(BREADCRUMB_TEMPLATE_PROPERTY, null).render())
.getData()
.data()
.orElseGet(errorTemplate::render))
.build();
}
......@@ -100,6 +104,7 @@ public class AdoptersResource {
@GET
@Produces(MediaType.TEXT_HTML)
@Path("how-to-be-listed-as-an-adopter")
@Cache(maxAge = CacheControlCommonValues.AGGRESSIVE_CACHE_MAX_AGE)
public Response getListedPage() {
return Response
.ok(cache
......@@ -109,7 +114,7 @@ public class AdoptersResource {
new Breadcrumb("/adopters/how-to-be-listed-as-an-adopter",
"How to be listed as an Adopter"))
.render())
.getData()
.data()
.orElseGet(errorTemplate::render))
.build();
}
......@@ -117,13 +122,14 @@ public class AdoptersResource {
@GET
@Produces(MediaType.TEXT_HTML)
@Path("project-adopters/{alias}")
@Cache(maxAge = CacheControlCommonValues.AGGRESSIVE_CACHE_MAX_AGE)
public Response getWorkingGroupSubPage(@PathParam("alias") String workingGroupAlias) {
// retrieve the corresponding working group, or return an error
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.get(workingGroupAlias, null, String.class, errorTemplate::render).getData().orElseGet(errorTemplate::render))
.ok(cache.get(workingGroupAlias, null, String.class, errorTemplate::render).data().orElseGet(errorTemplate::render))
.build();
}
// using the discovered working group, render the working group adopters page, w/ fallback on error page
......@@ -132,50 +138,51 @@ public class AdoptersResource {
.get(workingGroupAlias, null, String.class, () -> adoptersWgTemplate
.data("wg", currentWg.get())
.data(BREADCRUMB_TEMPLATE_PROPERTY,
new Breadcrumb("/adopters/project-adopters/" + workingGroupAlias, currentWg.get().getTitle()))
new Breadcrumb("/adopters/project-adopters/" + workingGroupAlias, currentWg.get().title()))
.render())
.getData()
.data()
.orElseGet(errorTemplate::render))
.build();
}
@GET
@Path("/projects")
@Cache(maxAge = CacheControlCommonValues.AGGRESSIVE_CACHE_MAX_AGE)
public Response getAllAdopters(@QueryParam("working_group") String workingGroup, @QueryParam("interest_group") String interestGroup) {
// get cached project list
List<Project> projects = projectService.getAllProjects();
if (StringUtils.isNotBlank(workingGroup)) {
// check that the passed WG is a valid WG before filtering
List<WorkingGroup> groups = lcm.getList(ParameterizedCacheKey.builder().setId("all").setClazz(WorkingGroup.class).build());
List<WorkingGroup> groups = lcm.getList(ParameterizedCacheKeyBuilder.builder().id("all").clazz(WorkingGroup.class).build());
if (LOGGER.isDebugEnabled()) {
LOGGER
.debug("Groups: {}, looking for {} ({})", groups, workingGroup,
groups.stream().noneMatch(wg -> wg.getAlias().equals(workingGroup)));
.debug("Groups: {}, looking for {} ({})", groups, TransformationHelper.formatLog(workingGroup),
groups.stream().noneMatch(wg -> wg.alias().equals(workingGroup)));
}
if (groups.stream().noneMatch(wg -> wg.getAlias().equals(workingGroup))) {
if (groups.stream().noneMatch(wg -> wg.alias().equals(workingGroup))) {
throw new BadRequestException("Passed working group is not a valid working group");
}
// filter the projects by the passed working group
projects = projects
.stream()
.filter(p -> p.getIndustryCollaborations().stream().anyMatch(wg -> wg.getId().equals(workingGroup)))
.filter(p -> p.industryCollaborations().stream().anyMatch(wg -> wg.id().equals(workingGroup)))
.toList();
}
if (StringUtils.isNotBlank(interestGroup)) {
// check that the passed IG is a valid IG before filtering
List<InterestGroup> groups = lcm.getList(ParameterizedCacheKey.builder().setId("all").setClazz(InterestGroup.class).build());
List<InterestGroup> groups = lcm.getList(ParameterizedCacheKeyBuilder.builder().id("all").clazz(InterestGroup.class).build());
if (LOGGER.isDebugEnabled()) {
LOGGER
.debug("Groups: {}, looking for {} ({})", groups, interestGroup,
groups.stream().noneMatch(ig -> ig.getShortProjectId().equals(interestGroup)));
.debug("Groups: {}, looking for {} ({})", groups, TransformationHelper.formatLog(interestGroup),
groups.stream().noneMatch(ig -> ig.shortProjectId().equals(interestGroup)));
}
if (groups.stream().noneMatch(wg -> wg.getShortProjectId().equals(interestGroup))) {
if (groups.stream().noneMatch(wg -> wg.shortProjectId().equals(interestGroup))) {
throw new BadRequestException("Passed interest group is not a valid interest group");
}
// filter the projects by the passed working group
projects = projects
.stream()
.filter(p -> p.getIndustryCollaborations().stream().anyMatch(wg -> wg.getId().equals(interestGroup)))
.filter(p -> p.industryCollaborations().stream().anyMatch(wg -> wg.id().equals(interestGroup)))
.toList();
}
......@@ -193,10 +200,11 @@ public class AdoptersResource {
@GET
@Path("/projects/{projectId}")
@Cache(maxAge = CacheControlCommonValues.AGGRESSIVE_CACHE_MAX_AGE)
public Response getAdoptersForProject(@PathParam("projectId") String projectId) {
// get cached project list
List<Project> projects = projectService.getAllProjects();
List<Project> filteredProjects = projects.stream().filter(p -> p.getProjectId().equals(projectId)).toList();
List<Project> filteredProjects = projects.stream().filter(p -> p.projectId().equals(projectId)).toList();
// no projects for working group
if (filteredProjects.isEmpty()) {
return Response.ok(Collections.emptyList()).build();
......
......@@ -12,16 +12,15 @@
**********************************************************************/
package org.eclipsefoundation.adopters.service.impl;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
import org.eclipse.microprofile.config.inject.ConfigProperty;
import org.eclipsefoundation.adopters.model.AdoptedProject;
import org.eclipsefoundation.adopters.model.AdoptedProjectBuilder;
import org.eclipsefoundation.adopters.model.Adopter;
import org.eclipsefoundation.adopters.model.AdopterList;
import org.eclipsefoundation.adopters.service.AdopterService;
......@@ -37,8 +36,7 @@ import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
/**
* Retrieves the adopters information from the filesystem on service start, and
* provides copies to requesting callers.
* Retrieves the adopters information from the filesystem on service start, and provides copies to requesting callers.
*
* @author Martin Lowe, Zachary Sabourin
*
......@@ -46,55 +44,57 @@ import jakarta.inject.Inject;
@Startup
@ApplicationScoped
public class DefaultAdopterService implements AdopterService {
private static final Logger LOGGER = LoggerFactory.getLogger(DefaultAdopterService.class);
private static final Logger LOGGER = LoggerFactory.getLogger(DefaultAdopterService.class);
@ConfigProperty(name = "eclipse.project-adopters.filepath", defaultValue = "adopters.json")
String adoptersFilepath;
@ConfigProperty(name = "eclipse.project-adopters.filepath", defaultValue = "adopters.json")
String adoptersFilepath;
@Inject
ObjectMapper objectMapper;
@Inject
ObjectMapper objectMapper;
private List<Adopter> adopters;
private List<Adopter> adopters;
@PostConstruct
public void init() throws IOException {
// Attempt to load file on startup. Failing if there is an issue
try (InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream(adoptersFilepath)) {
AdopterList adopterList = objectMapper.readValue(is, AdopterList.class);
this.adopters = new ArrayList<>(adopterList.getAdopters());
LOGGER.info("Initialized {} adopters", adopters.size());
}
}
@PostConstruct
public void init() throws IOException {
// Attempt to load file on startup. Failing if there is an issue
try (InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream(adoptersFilepath)) {
AdopterList adopterList = objectMapper.readValue(is, AdopterList.class);
this.adopters = new ArrayList<>(adopterList.adopters());
LOGGER.info("Initialized {} adopters", adopters.size());
}
}
@Override
public List<Adopter> getAdopters() {
// Return all adopters loaded from file
return new ArrayList<>(adopters);
}
@Override
public List<Adopter> getAdopters() {
// Return all adopters loaded from file
return new ArrayList<>(adopters);
}
@Override
public List<AdoptedProject> getAdoptedProjects(List<Project> projects) {
// For each project, we create an AdoptedProject entity with all relevant adopters
return projects.stream().map(this::getAdoptedProject).filter(a -> !a.getAdopters().isEmpty())
.collect(Collectors.toList());
}
@Override
public List<AdoptedProject> getAdoptedProjects(List<Project> projects) {
// For each project, we create an AdoptedProject entity with all relevant adopters
return projects.stream().map(this::getAdoptedProject).filter(a -> !a.adopters().isEmpty()).toList();
}
/**
* Creates an AdoptedProject entity using the given project information. Adds
* all project adopters that match the given project's id.
*
* @param p The given project
* @return A constructed AdoptedProject entity with all relevant information.
*/
private AdoptedProject getAdoptedProject(Project p) {
return AdoptedProject.builder()
.setProjectId(p.getProjectId())
.setName(p.getName())
.setLogo(p.getLogo())
.setUrl(p.getUrl())
.setAdopters(getAdopters().stream().filter(a -> a.getProjects().contains(p.getProjectId()))
.sorted(Comparator.comparing(a -> a.getName().toLowerCase())).collect(Collectors.toList()))
.build();
}
/**
* Creates an AdoptedProject entity using the given project information. Adds all project adopters that match the given project's id.
*
* @param p The given project
* @return A constructed AdoptedProject entity with all relevant information.
*/
private AdoptedProject getAdoptedProject(Project p) {
return AdoptedProjectBuilder
.builder()
.projectId(p.projectId())
.name(p.name())
.logo(p.logo())
.url(p.url())
.adopters(getAdopters()
.stream()
.filter(a -> a.projects().contains(p.projectId()))
.sorted(Comparator.comparing(a -> a.name().toLowerCase()))
.toList())
.build();
}
}
......@@ -28,19 +28,22 @@ spec:
values:
- fast
weight: 1
automountServiceAccountToken: false
containers:
- name: app
image: eclipsefdn/eclipsefdn-project-adopters:latest
imagePullPolicy: Always
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8090
resources:
limits:
cpu: 300m
memory: 384Mi
ephemeral-storage: "100Mi"
requests:
cpu: 300m
memory: 384Mi
ephemeral-storage: "100Mi"
startupProbe:
httpGet:
path: /adopters/q/health
......
......@@ -28,19 +28,22 @@ spec:
values:
- fast
weight: 1
automountServiceAccountToken: false
containers:
- name: app
image: eclipsefdn/eclipsefdn-project-adopters:latest-staging
imagePullPolicy: Always
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8090
resources:
limits:
cpu: 300m
memory: 384Mi
ephemeral-storage: "100Mi"
requests:
cpu: 300m
memory: 384Mi
ephemeral-storage: "100Mi"
startupProbe:
httpGet:
path: /adopters/q/health
......
......@@ -49,6 +49,15 @@
"iot.zenoh"
]
},
{
"name": "AiP Safe",
"homepage_url": "https://www.aipsafe.cz/",
"logo": "logo-aipsafe.png",
"logo_white": "logo-aipsafe-white.png",
"projects": [
"adoptium.temurin"
]
},
{
"name": "Alias Robotics",
"homepage_url": "https://aliasrobotics.com/",
......@@ -108,15 +117,24 @@
"technology.iceoryx"
]
},
{
"name": "Arburg",
"homepage_url": "https://www.arburg.com/en/",
"logo": "logo-arburg.png",
"logo_white": "logo-arburg-white.png",
"projects": [
"iot.streamsheets"
]
},
{
"name": "Arburg",
"homepage_url": "https://www.arburg.com/en/",
"logo": "logo-arburg.png",
"logo_white": "logo-arburg-white.png",
"projects": [
"iot.streamsheets"
]
},
{
"name": "Archeion",
"homepage_url": "https://archeion.tech/",
"logo": "logo-archeion.svg",
"logo_white": "logo-archeion-white.svg",
"projects": [
"iot.thingweb"
]
},
{
"name": "Arduino",
"homepage_url": "https://www.arduino.cc/en/software#future-version-of-the-arduino-ide",
......@@ -173,6 +191,15 @@
"ecd.glsp"
]
},
{
"name": "Avantronics",
"homepage_url": "https://avantronics.com.mx/",
"logo": "logo-avantronics.png",
"logo_white": "logo-avantronics-white.png",
"projects": [
"iot.keyple"
]
},
{
"name": "beyonnex.io",
"homepage_url": "https://beyonnex.io",
......@@ -182,6 +209,15 @@
"iot.ditto"
]
},
{
"name": "Billettique Services",
"homepage_url": "https://billettiqueservices.com/",
"logo": "logo-billettique-services.png",
"logo_white": "logo-billetique-services-white.png",
"projects": [
"iot.keyple"
]
},
{
"name": "Binero Group",
"homepage_url": "https://binero.com/en",
......@@ -392,6 +428,15 @@
"iot.keyple"
]
},
{
"name": "Cumulocity IoT by Software AG",
"homepage_url": "https://www.softwareag.cloud/site/product/cumulocity-iot.html",
"logo": "logo-cumulocity-by-softwareag.svg",
"logo_white": "logo-cumulocity-by-softwareag-white.svg",
"projects": [
"iot.leshan"
]
},
{
"name": "Delphix",
"homepage_url": "https://www.delphix.com",
......@@ -451,15 +496,24 @@
"iot.californium"
]
},
{
"name": "Eckl Electric",
"homepage_url": "https://www.getstokt.com/",
"logo": "logo-eckl-electric.png",
"logo_white": "logo-eckl-electric-white.png",
"projects": [
"iot.mosquitto"
]
},
{
"name": "Eckl Electric",
"homepage_url": "https://www.getstokt.com/",
"logo": "logo-eckl-electric.png",
"logo_white": "logo-eckl-electric-white.png",
"projects": [
"iot.mosquitto"
]
},
{
"name": "EcoMobility",
"homepage_url": "https://www.ecomobility-project.eu/",
"logo": "logo-eco-mobility.png",
"logo_white": "",
"projects": [
"iot.zenoh"
]
},
{
"name": "EdgeIQ",
"homepage_url": "https://www.edgeiq.ai/",
......@@ -478,6 +532,15 @@
"iot.cyclonedds"
]
},
{
"name": "EMPYREAN",
"homepage_url": "https://empyrean-horizon.eu/",
"logo": "logo-empyrean.png",
"logo_white": "",
"projects": [
"iot.zenoh"
]
},
{
"name": "Entiros",
"homepage_url": "https://entiros.se/",
......@@ -557,17 +620,26 @@
"iot.keyple"
]
},
{
"name": "FARobot",
"homepage_url": "https://www.farobottech.com/",
"logo": "logo-farobot.png",
"logo_white": "logo-farobot-white.png",
"projects": [
"iot.cyclonedds",
"technology.iceoryx",
"iot.zenoh"
]
},
{
"name": "FARobot",
"homepage_url": "https://www.farobottech.com/",
"logo": "logo-farobot.png",
"logo_white": "logo-farobot-white.png",
"projects": [
"iot.cyclonedds",
"technology.iceoryx",
"iot.zenoh"
]
},
{
"name": "FAU Chair of Technical Information Systems",
"homepage_url": "https://www.ti.rw.fau.de/",
"logo": "logo-fau.png",
"logo_white": "logo-fau-white.png",
"projects": [
"iot.thingweb"
]
},
{
"name": "Fivecomm",
"homepage_url": "https://fivecomm.eu/",
......@@ -604,15 +676,15 @@
"iot.cyclonedds"
]
},
{
"name": "Futurewei",
"homepage_url": "https://www.futurewei.com/",
"logo": "logo-futurewei.png",
"logo_white": "logo-futurewei-white.png",
"projects": [
"iot.zenoh"
]
},
{
"name": "Futurewei",
"homepage_url": "https://www.futurewei.com/",
"logo": "logo-futurewei.png",
"logo_white": "logo-futurewei-white.png",
"projects": [
"iot.zenoh"
]
},
{
"name": "Foxconn",
"homepage_url": "https://www.foxconn.com/en-us/",
......@@ -741,6 +813,15 @@
"ecd.openvsx"
]
},
{
"name": "ICOS",
"homepage_url": "https://www.icos-project.eu/",
"logo": "logo-icos.png",
"logo_white": "",
"projects": [
"iot.zenoh"
]
},
{
"name": "Ile-de-France Mobilités",
"homepage_url": "https://www.iledefrance-mobilites.fr/",
......@@ -898,15 +979,24 @@
"ecd.theia"
]
},
{
"name": "Mapless AI, Inc.",
"homepage_url": "https://mapless.ai",
"logo": "logo-maplessai.svg",
"logo_white": "logo-maplessai-white.svg",
"projects": [
"iot.cyclonedds"
]
},
{
"name": "Mapless AI, Inc.",
"homepage_url": "https://mapless.ai",
"logo": "logo-maplessai.svg",
"logo_white": "logo-maplessai-white.svg",
"projects": [
"iot.cyclonedds"
]
},
{
"name": "MAVERIC Project",
"homepage_url": "https://www.maveric-project.org/",
"logo": "logo-maveric.svg",
"logo_white": "logo-maveric-white.svg",
"projects": [
"iot.thingweb"
]
},
{
"name": "MediaMarktSaturn Technology",
"homepage_url": "https://mms.tech/",
......@@ -925,6 +1015,15 @@
"adoptium.temurin"
]
},
{
"name": "Michelin",
"homepage_url": "https://opensource.michelin.io/",
"logo": "logo-michelin.svg",
"logo_white": "logo-michelin-white.svg",
"projects": [
"adoptium.temurin"
]
},
{
"name": "Microsoft",
"homepage_url": "https://microsoft.com/",
......@@ -932,7 +1031,8 @@
"logo_white": "logo-microsoft-white.svg",
"projects": [
"iot.paho",
"adoptium.temurin"
"adoptium.temurin",
"iot.thingweb"
]
},
{
......@@ -962,6 +1062,15 @@
"adoptium.temurin"
]
},
{
"name": "NEPHELE Project",
"homepage_url": "https://nephele-project.eu/",
"logo": "logo-nephele.svg",
"logo_white": "",
"projects": [
"iot.thingweb"
]
},
{
"name": "New Eagle",
"homepage_url": "https://neweagle.net",
......@@ -1061,6 +1170,15 @@
"iot.leshan"
]
},
{
"name": "ORMAES",
"homepage_url": "https://www.ormaes.fr/",
"logo": "logo-ormaes.svg",
"logo_white": "logo-ormaes-white.svg",
"projects": [
"iot.keyple"
]
},
{
"name": "OSB connagtive GmbH",
"homepage_url": "https://iot-suite.io",
......@@ -1275,6 +1393,15 @@
"iot.cyclonedds"
]
},
{
"name": "Secretaría de Movilidad",
"homepage_url": "https://www.semovi.cdmx.gob.mx",
"logo": "logo-cdmx-semovi.svg",
"logo_white": "logo-cdmx-semovi-white.svg",
"projects": [
"iot.keyple"
]
},
{
"name": "Scentbird",
"homepage_url": "https://www.scentbird.com",
......@@ -1293,6 +1420,15 @@
"iot.cyclonedds"
]
},
{
"name": "Siemens",
"homepage_url": "https://www.siemens.com",
"logo": "logo-siemens.png",
"logo_white": "logo-siemens-white.png",
"projects": [
"iot.thingweb"
]
},
{
"name": "Sierra Wireless",
"homepage_url": "https://www.sierrawireless.com/",
......@@ -1322,15 +1458,6 @@
"iot.keyple"
]
},
{
"name": "Cumulocity IoT by Software AG",
"homepage_url": "https://www.softwareag.cloud/site/product/cumulocity-iot.html",
"logo": "logo-cumulocity-by-softwareag.svg",
"logo_white": "logo-cumulocity-by-softwareag-white.svg",
"projects": [
"iot.leshan"
]
},
{
"name": "Societe Generale",
"homepage_url": "https://www.societegenerale.com/",
......@@ -1376,6 +1503,15 @@
"iot.keyple"
]
},
{
"name": "Starburst",
"homepage_url": "https://starburst.io/",
"logo": "logo-starburst.svg",
"logo_white": "logo-starburst-white.svg",
"projects": [
"adoptium.temurin"
]
},
{
"name": "Steinbeis-Transferzentrum Industrielle Digitalisierung",
"homepage_url": "https://idhorb.de/",
......@@ -1432,15 +1568,33 @@
"iot.ditto"
]
},
{
"name": "Terapines",
"homepage_url": "https://www.terapines.com/",
"logo": "logo-terapines.svg",
"logo_white": "logo-terapines-white.svg",
"projects": [
"ecd.theia"
]
},
{
"name": "Technical University of Munich (TUM)",
"homepage_url": "https://www.tum.de/",
"logo": "logo-tum.png",
"logo_white": "logo-tum-white.png",
"projects": [
"iot.thingweb"
]
},
{
"name": "Terapines",
"homepage_url": "https://www.terapines.com/",
"logo": "logo-terapines.svg",
"logo_white": "logo-terapines-white.svg",
"projects": [
"ecd.theia"
]
},
{
"name": "Texas Instruments",
"homepage_url": "https://www.ti.com/",
"logo": "logo-texas-instruments.png",
"logo_white": "logo-texas-instruments.png",
"projects": [
"ecd.theia"
]
},
{
"name": "The Construct",
"homepage_url": "http://www.theconstruct.ai",
......@@ -1516,6 +1670,15 @@
"iot.cyclonedds"
]
},
{
"name": "Trend Micro",
"homepage_url": "https://www.trendmicro.com/",
"logo": "logo-trend-micro.png",
"logo_white": "",
"projects": [
"adoptium.temurin"
]
},
{
"name": "TypeFox",
"homepage_url": "https://www.typefox.io/",
......@@ -1607,6 +1770,15 @@
"projects": [
"iot.cyclonedds"
]
},
{
"name": "Lonti",
"homepage_url": "https://lonti.com",
"logo": "logo-lonti.png",
"logo_white": "logo-lonti-white.png",
"projects": [
"ecd.theia"
]
}
]
}
{#eclipse_base title='404 File not found'}
{#eclipse_base title='404 File not found' _unisolated}
{#content}
<p>We're sorry, the page you requested cannot be found. Below are some links that may be useful.</p>
<ul>
<li><a href="//eclipse.org">Eclipse home</a></li>
<li><a href="//eclipse.org/projects/searchpage.php">Search</a> our site</li>
<li>Website <a href="//eclipse.org/legal/privacy.php">privacy policy</a> and <a href="//eclipse.org/legal/termsofuse.php">terms of use</a></li>
<li><a href="//eclipse.org/legal">Legal documents</a></li>
<li>Website <a href="//eclipse.org/legal/privacy/">privacy policy</a> and <a href="//eclipse.org/legal/terms-of-use/">terms of use</a></li>
<li><a href="//eclipse.org/legal/">Legal documents</a></li>
<li><a href="//eclipse.org/artwork/">Logos</a> and artwork</li>
<li><a href="//wiki.eclipse.org/index.php/Webmaster_FAQ">webmaster FAQ</a></li>
<li><a href="mailto:webmaster@eclipse.org">Email the webmaster</a></li>
......
{#eclipse_base title="Eclipse Project Adopters"}
{#eclipse_base _unisolated}
{#title}Eclipse Project Adopters{/}
{#precontent}
{#include eclipse_breadcrumb}{/}
{/}
......
{#eclipse_base title="How to be listed as an Adopter"}
{#eclipse_base _unisolated}
{#title}How to be listed as an Adopter{/}
{#precontent}
{#include eclipse_breadcrumb}{/}
{/}
......
{#eclipse_base title=str:format("Project adopters - %s", wg.title)}
{#eclipse_base _unisolated}
{#title}{str:format("Project adopters - %s", wg.title)}{/}
{#precontent}
{#include eclipse_breadcrumb}{/}
{/}
......
......@@ -47,9 +47,11 @@ class AdoptersResourceTest {
private static final EndpointTestCase GET_ALL_SUCCESS = TestCaseHelper
.buildSuccessCase(ADOPTED_PROJECTS_URL, new String[] {}, SchemaNamespaceHelper.ADOPTED_PROJECTS_SCHEMA_PATH);
private static final EndpointTestCase GET_ALL_BY_WG_SUCCESS = TestCaseHelper
.buildSuccessCase(ADOPTED_PROJECT_BY_WG_URL, new String[] { VALID_WG_ALIAS }, SchemaNamespaceHelper.ADOPTED_PROJECTS_SCHEMA_PATH);
.buildSuccessCase(ADOPTED_PROJECT_BY_WG_URL, new String[] { VALID_WG_ALIAS },
SchemaNamespaceHelper.ADOPTED_PROJECTS_SCHEMA_PATH);
private static final EndpointTestCase GET_ALL_BY_IG_SUCCESS = TestCaseHelper
.buildSuccessCase(ADOPTED_PROJECT_BY_IG_URL, new String[] { VALID_IG_ALIAS }, SchemaNamespaceHelper.ADOPTED_PROJECTS_SCHEMA_PATH);
.buildSuccessCase(ADOPTED_PROJECT_BY_IG_URL, new String[] { VALID_IG_ALIAS },
SchemaNamespaceHelper.ADOPTED_PROJECTS_SCHEMA_PATH);
private static final EndpointTestCase GET_ALL_BY_PROJECT_SUCCESS = TestCaseHelper
.buildSuccessCase(SINGLE_PROJECT_URL, new String[] { "sample.proj" }, SchemaNamespaceHelper.ADOPTED_PROJECTS_SCHEMA_PATH);
......@@ -57,7 +59,7 @@ class AdoptersResourceTest {
ObjectMapper om;
/*
* GET /adopters
* Endpoint data: GET/adopters
*/
@Test
void getBaseTemplatePage_success() {
......@@ -69,7 +71,7 @@ class AdoptersResourceTest {
}
/*
* GET /adopters/how-to-be-listed-as-an-adopter
* Endpoint data: GET/adopters/how-to-be-listed-as-an-adopter
*/
@Test
void getHowToTemplatePage_success() {
......@@ -85,7 +87,7 @@ class AdoptersResourceTest {
}
/*
* GET /adopters/project-adopters/{wg}
* Endpoint data: GET/adopters/project-adopters/{wg}
*/
@Test
void getSubTemplatePage_success() {
......@@ -116,7 +118,7 @@ class AdoptersResourceTest {
}
/*
* GET /adopters/projects
* Endpoint data: GET/adopters/projects
*/
@Test
void getAdoptedProjects_success() {
......@@ -136,7 +138,7 @@ class AdoptersResourceTest {
}
/*
* GET /adopters/projects?working_group={param}
* Endpoint data: GET/adopters/projects?working_group={param}
*/
@Test
void getAdoptedProjectsByWG_success() {
......@@ -165,6 +167,7 @@ class AdoptersResourceTest {
.doGet()
.run();
}
@Test
void getAdoptedProjects_failure_igAliasPassedInsteadOfWG() {
// IG passed as WG doesn't have results
......@@ -176,9 +179,8 @@ class AdoptersResourceTest {
.run();
}
/*
* GET /adopters/projects?interest_group={param}
* Endpoint data: GET/adopters/projects?interest_group={param}
*/
@Test
void getAdoptedProjectsByIG_success() {
......@@ -207,6 +209,7 @@ class AdoptersResourceTest {
.doGet()
.run();
}
@Test
void getAdoptedProjects_failure_wgAliasPassedInsteadOfIG() {
// IG passed as IG doesn't have results
......@@ -217,9 +220,9 @@ class AdoptersResourceTest {
.doGet()
.run();
}
/*
* GET /adopters/projects/{projectId}
* Endpoint data: GET/adopters/projects/{projectId}
*/
@Test
void getAdoptedProjectsByProject_success() {
......
......@@ -14,20 +14,22 @@ package org.eclipsefoundation.adopters.test.api;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import org.eclipse.microprofile.rest.client.inject.RestClient;
import org.eclipsefoundation.core.service.APIMiddleware.BaseAPIParameters;
import org.eclipsefoundation.efservices.api.WorkingGroupsAPI;
import org.eclipsefoundation.efservices.api.models.WorkingGroup;
import org.eclipsefoundation.efservices.api.models.WorkingGroup.WorkingGroupParticipationAgreement;
import org.eclipsefoundation.efservices.api.models.WorkingGroup.WorkingGroupParticipationAgreements;
import org.eclipsefoundation.efservices.api.models.WorkingGroup.WorkingGroupParticipationLevel;
import org.eclipsefoundation.efservices.api.models.WorkingGroup.WorkingGroupResources;
import org.eclipsefoundation.efservices.api.models.WorkingGroupBuilder;
import org.eclipsefoundation.efservices.api.models.WorkingGroupWorkingGroupParticipationAgreementBuilder;
import org.eclipsefoundation.efservices.api.models.WorkingGroupWorkingGroupParticipationAgreementsBuilder;
import org.eclipsefoundation.efservices.api.models.WorkingGroupWorkingGroupParticipationLevelBuilder;
import org.eclipsefoundation.efservices.api.models.WorkingGroupWorkingGroupResourcesBuilder;
import org.eclipsefoundation.testing.helpers.MockDataPaginationHandler;
import org.jboss.resteasy.reactive.RestResponse;
import io.quarkus.test.Mock;
import io.smallrye.mutiny.Uni;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.ws.rs.core.Response;
@Mock
@RestClient
......@@ -38,48 +40,51 @@ public class MockWorkingGroupAPI implements WorkingGroupsAPI {
public MockWorkingGroupAPI() {
this.wgs = new ArrayList<>();
this.wgs.addAll(Arrays.asList(WorkingGroup
.builder()
.setAlias("sample-wg")
.setDescription("")
.setLevels(Arrays.asList(WorkingGroupParticipationLevel.builder().setDescription("sample")
.setRelation("WGSAMP").build()))
.setLogo("")
.setParentOrganization("eclipse")
.setResources(WorkingGroupResources
.builder()
.setCharter("")
.setContactForm("")
.setMembers("")
.setSponsorship("")
.setWebsite("")
.setParticipationAgreements(WorkingGroupParticipationAgreements
this.wgs
.addAll(Arrays
.asList(WorkingGroupBuilder
.builder()
.setIndividual(WorkingGroupParticipationAgreement
.alias("sample-wg")
.description("")
.levels(Arrays
.asList(WorkingGroupWorkingGroupParticipationLevelBuilder
.builder()
.description("sample")
.relation("WGSAMP")
.build()))
.logo("")
.parentOrganization("eclipse")
.resources(WorkingGroupWorkingGroupResourcesBuilder
.builder()
.setDocumentId("sample-wg-iwgpa")
.setPdf("sample-wg-iwgpa.pdf")
.charter("")
.contactForm("")
.members("")
.sponsorship("")
.website("")
.participationAgreements(WorkingGroupWorkingGroupParticipationAgreementsBuilder
.builder()
.individual(WorkingGroupWorkingGroupParticipationAgreementBuilder
.builder()
.documentId("sample-wg-iwgpa")
.pdf("sample-wg-iwgpa.pdf")
.build())
.organization(WorkingGroupWorkingGroupParticipationAgreementBuilder
.builder()
.documentId("sample-wg-owgpa")
.pdf("sample-wg-owgpa.pdf")
.build())
.build())
.build())
.setOrganization(WorkingGroupParticipationAgreement
.builder()
.setDocumentId("sample-wg-owgpa")
.setPdf("sample-wg-owgpa.pdf")
.build())
.build())
.build())
.setStatus("active")
.setTitle("Sample WG")
.build()));
}
@Override
public Response get(BaseAPIParameters baseParams) {
return Response.ok(wgs).build();
.status("active")
.title("Sample WG")
.build()));
}
@Override
public Response getAllByStatuses(BaseAPIParameters baseParams, List<String> statuses) {
return Response.ok(wgs.stream().filter(wg -> statuses.contains(wg.getStatus())).collect(Collectors.toList()))
.build();
public Uni<RestResponse<List<WorkingGroup>>> get(BaseAPIParameters baseParams, List<String> statuses) {
return Uni
.createFrom()
.item(MockDataPaginationHandler
.paginateData(baseParams, wgs.stream().filter(wg -> statuses == null || statuses.contains(wg.status())).toList()));
}
}