// Path: examples/src/main/java/com/github/peckb1/examples/base/Fraggle.java
// @JsonTypeInfo(use = Id.NAME,
//         include = JsonTypeInfo.As.PROPERTY,
//         property = "name") // not compile time checked
// @JsonSubTypes({
//         @Type(value = Wembley.class, name = "WEMBLEY"), // not compile time checked
//         @Type(value = Boober.class, name = "BOOBER")    // not compile time checked
// })
// public abstract class Fraggle {
//     protected static final String HAIR_COLOUR_KEY = "hairColour";
//     protected static final String HAT_KEY = "hat";
//     protected static final String JOB_KEY = "job";
// 
//     @JsonProperty(value = HAIR_COLOUR_KEY, required = true)
//     private final String hairColour;
// 
//     @JsonProperty(value = HAT_KEY, required = true)
//     private final Boolean wearsHats;
// 
//     @JsonProperty(value = JOB_KEY)
//     private final Optional<Job> job;
// 
//     protected Fraggle(String hairColour, Boolean wearsHats, Optional<Job> job) {
//         this.hairColour = hairColour;
//         this.wearsHats = wearsHats;
//         this.job = job;
//     }
// 
//     @JsonIgnore
//     public abstract FraggleName getFraggleName();
// 
//     public String getHairColour() {
//         return this.hairColour;
//     }
// 
//     public Boolean wearsHats() {
//         return this.wearsHats;
//     }
// 
//     public Optional<Job> getJob() {
//         return this.job;
//     }
// 
//     public enum FraggleName {
//         WEMBLEY, BOOBER
//     }
// }
// 
// Path: examples/src/main/java/com/github/peckb1/examples/base/Job.java
// public class Job {
//     private static final String OCCUPATION_KEY = "occupation";
//     private static final String DAYS_WORKED_KEY = "daysWorked";
// 
//     @JsonProperty(value = OCCUPATION_KEY, required = true)
//     private final String occupation;
// 
//     @JsonProperty(value = DAYS_WORKED_KEY, required = true)
//     private final int daysWorked;
// 
//     public Job(@JsonProperty(value = OCCUPATION_KEY, required = true) String occupation,
//                @JsonProperty(value = DAYS_WORKED_KEY, required = true) int daysWorked) {
//         this.occupation = occupation;
//         this.daysWorked = daysWorked;
//     }
// 
//     public String getOccupation() {
//         return this.occupation;
//     }
// 
//     public int getDaysWorked() {
//         return this.daysWorked;
//     }
// }


import com.fasterxml.jackson.annotation.JsonProperty;
import com.github.peckb1.examples.base.Fraggle;
import com.github.peckb1.examples.base.Job;
import java.util.Optional;
package com.github.peckb1.examples.base.fraggles;



public class Boober extends Fraggle {
    public Boober(@JsonProperty(value = HAIR_COLOUR_KEY, required = true) String hairColour,
                  @JsonProperty(value = HAT_KEY, required = true) Boolean wearsHats,
                  @JsonProperty(value = JOB_KEY) Optional<Job> job) {
        super(hairColour, wearsHats, job);
    }

    @Override
// Path: examples/src/main/java/com/github/peckb1/examples/base/Fraggle.java
// @JsonTypeInfo(use = Id.NAME,
//         include = JsonTypeInfo.As.PROPERTY,
//         property = "name") // not compile time checked
// @JsonSubTypes({
//         @Type(value = Wembley.class, name = "WEMBLEY"), // not compile time checked
//         @Type(value = Boober.class, name = "BOOBER")    // not compile time checked
// })
// public abstract class Fraggle {
//     protected static final String HAIR_COLOUR_KEY = "hairColour";
//     protected static final String HAT_KEY = "hat";
//     protected static final String JOB_KEY = "job";
// 
//     @JsonProperty(value = HAIR_COLOUR_KEY, required = true)
//     private final String hairColour;
// 
//     @JsonProperty(value = HAT_KEY, required = true)
//     private final Boolean wearsHats;
// 
//     @JsonProperty(value = JOB_KEY)
//     private final Optional<Job> job;
// 
//     protected Fraggle(String hairColour, Boolean wearsHats, Optional<Job> job) {
//         this.hairColour = hairColour;
//         this.wearsHats = wearsHats;
//         this.job = job;
//     }
// 
//     @JsonIgnore
//     public abstract FraggleName getFraggleName();
// 
//     public String getHairColour() {
//         return this.hairColour;
//     }
// 
//     public Boolean wearsHats() {
//         return this.wearsHats;
//     }
// 
//     public Optional<Job> getJob() {
//         return this.job;
//     }
// 
//     public enum FraggleName {
//         WEMBLEY, BOOBER
//     }
// }
// 
// Path: examples/src/main/java/com/github/peckb1/examples/base/Job.java
// public class Job {
//     private static final String OCCUPATION_KEY = "occupation";
//     private static final String DAYS_WORKED_KEY = "daysWorked";
// 
//     @JsonProperty(value = OCCUPATION_KEY, required = true)
//     private final String occupation;
// 
//     @JsonProperty(value = DAYS_WORKED_KEY, required = true)
//     private final int daysWorked;
// 
//     public Job(@JsonProperty(value = OCCUPATION_KEY, required = true) String occupation,
//                @JsonProperty(value = DAYS_WORKED_KEY, required = true) int daysWorked) {
//         this.occupation = occupation;
//         this.daysWorked = daysWorked;
//     }
// 
//     public String getOccupation() {
//         return this.occupation;
//     }
// 
//     public int getDaysWorked() {
//         return this.daysWorked;
//     }
// }


// Path: examples/src/main/java/com/github/peckb1/examples/base/fraggles/Boober.java
import com.fasterxml.jackson.annotation.JsonProperty;
import com.github.peckb1.examples.base.Fraggle;
import com.github.peckb1.examples.base.Job;
import java.util.Optional;

package com.github.peckb1.examples.base.fraggles;



public class Boober extends Fraggle {
    public Boober(@JsonProperty(value = HAIR_COLOUR_KEY, required = true) String hairColour,
                  @JsonProperty(value = HAT_KEY, required = true) Boolean wearsHats,
                  @JsonProperty(value = JOB_KEY) Optional<Job> job) {
        super(hairColour, wearsHats, job);
    }

    @Override
    public FraggleName getFraggleName() {