Skip to content

Commit

Permalink
Changing Rank to Enum
Browse files Browse the repository at this point in the history
  • Loading branch information
mswatosh committed Nov 21, 2023
1 parent 90ab66e commit 16433ab
Show file tree
Hide file tree
Showing 8 changed files with 67 additions and 9 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ The first endpoint persists a **CrewMember** in the database by calling `crewMem
public String add(CrewMember crewMember) {

//...
//Jakarta Bean Validation
//Jakarta Validation
//...

crewMembers.save(crewMember);
Expand Down
7 changes: 7 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -60,12 +60,19 @@
<version>2.1.3</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jakarta.json.bind</groupId>
<artifactId>jakarta.json.bind-api</artifactId>
<version>3.0.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.ibm.websphere.appserver.api</groupId>
<artifactId>com.ibm.websphere.appserver.api.passwordUtil</artifactId>
<version>[1.0.21,)</version>
<scope>provided</scope>
</dependency>
<!-- Test Dependencies-->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Pattern;

@Entity
Expand All @@ -22,8 +23,8 @@ public class CrewMember {
@NotEmpty(message = "All crew members must have a name!")
private String name;

@Pattern(regexp = "(Captain|Officer|Engineer)", message = "Crew member must be one of the listed ranks!")
private String rank;
@NotNull(message = "Crew member must be one of the listed ranks!")
private Rank rank;

@Id
@Pattern(regexp = "^\\d+$", message = "ID Number must be a non-negative integer!")
Expand All @@ -37,11 +38,11 @@ public void setName(String name) {
this.name = name;
}

public String getRank() {
public Rank getRank() {
return rank;
}

public void setRank(String rank) {
public void setRank(Rank rank) {
this.rank = rank;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
@Repository
public interface CrewMembers extends BasicRepository<CrewMember, String> {

List<CrewMember> findByRank(String rank);
List<CrewMember> findByRank(Rank rank);

@OrderBy("name")
Stream<CrewMember> findAll();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ public String retrieve() {
JsonObject json = Json.createObjectBuilder()
.add("Name", c.getName())
.add("CrewID", c.getCrewID())
.add("Rank",c.getRank()).build();
.add("Rank",c.getRank().toString()).build();
jab.add(json);

});
Expand All @@ -82,7 +82,7 @@ public String retrieve() {
@Path("/rank/{rank}")
public String retrieveByRank(@PathParam("rank") String rank) {
JsonArrayBuilder jab = Json.createArrayBuilder();
for (CrewMember c : crewMembers.findByRank(rank)) {
for (CrewMember c : crewMembers.findByRank(Rank.fromString(rank))) {
JsonObject json = Json.createObjectBuilder()
.add("Name", c.getName())
.add("CrewID", c.getCrewID()).build();
Expand Down
31 changes: 31 additions & 0 deletions src/main/java/io/openliberty/sample/application/Rank.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package io.openliberty.sample.application;

import jakarta.json.bind.annotation.JsonbTypeDeserializer;

@JsonbTypeDeserializer(RankDeserializer.class)
public enum Rank {
CAPTAIN("Captain"),
OFFICER("Officer"),
ENGINEER("Engineer");

private final String formatted;

Rank(String s) {
formatted = s;
}

public static Rank fromString(String s) {
for (Rank r : values()) {
if (r.formatted.equals(s)) {
return r;
}
}
return null;
}

@Override
public String toString() {
return formatted;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package io.openliberty.sample.application;

import java.lang.reflect.Type;

import jakarta.json.bind.serializer.DeserializationContext;
import jakarta.json.bind.serializer.JsonbDeserializer;
import jakarta.json.stream.JsonParser;


public class RankDeserializer implements JsonbDeserializer<Rank> {

@Override
public Rank deserialize(JsonParser parser, DeserializationContext ctx, Type rtType) {
String name = parser.getValue().toString().replaceAll("\"", ""); //TODO update app so we don't need to remove ""
return Rank.fromString(name);
}

}
3 changes: 2 additions & 1 deletion src/test/java/io/openliberty/sample/it/CrewServiceIT.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@
import jakarta.json.Json;
import jakarta.json.JsonArray;
import jakarta.json.JsonObject;
import jakarta.json.JsonObjectBuilder;
import jakarta.json.JsonReader;
import jakarta.json.JsonValue;
import jakarta.ws.rs.client.Client;
Expand All @@ -53,6 +52,8 @@ public static void init() {
public void setup() {
client = ClientBuilder.newClient();
assumeTrue(isPostgresAvailable(), "Postgres is not Available");
response = client.target(baseURL + "db/crew/it").request().post(Entity.json("{\"name\":\"Mark\",\"rank\":\"Captain\",\"crewID\":\"75\"}"));
assertEquals(200, response.getStatus(), "output: " + response.readEntity(String.class));
response = client.target(baseURL + "db/crew/").request().delete(); //Delete All before each test
assertEquals(204, response.getStatus(), "output: " + response.readEntity(String.class));
}
Expand Down

0 comments on commit 16433ab

Please sign in to comment.