Skip to content

Instantly share code, notes, and snippets.

@trikitrok
Last active July 30, 2025 07:21
Show Gist options
  • Save trikitrok/c5aa019fd8581487a7a5ab75b98d68b2 to your computer and use it in GitHub Desktop.
Save trikitrok/c5aa019fd8581487a7a5ab75b98d68b2 to your computer and use it in GitHub Desktop.
before segregating abbreviated
// imports elided...
public class ClaimBuilder {
// some fields elided...
public static ClaimBuilder aClaimReadyToOpen() {
ClaimBuilder builder = new ClaimBuilder();
builder.status = ClaimStatus.ReadyToOpen;
return aClaim(builder);
}
public static ClaimBuilder aClaimOpenButNotNotified() {
ClaimBuilder builder = new ClaimBuilder();
builder.status = ClaimStatus.OpenInCompanyButNotNotified;
return aClaim(builder);
}
private static ClaimBuilder aClaim(ClaimBuilder builder) {
// setting defaults elided...
return builder;
}
// some common setters elided...
public ClaimBuilder withCompany(Company company) {
this.company = company;
return this;
}
public ClaimBuilder withOpeningListener(ClaimsOpeningListener claimsOpeningListener) {
this.claimsOpeningListener = claimsOpeningListener;
return this;
}
public ClaimBuilder withReferenceInCompany(String referenceInCompany) {
this.referenceInCompany = claimReferenceInCompany(referenceInCompany);
return this;
}
public ClaimData buildData() {
return new ClaimData(
claimId,
companyId,
description,
claimDate,
policyNumber,
status
);
}
public Claim build() {
if (status == ClaimStatus.OpenInCompanyButNotNotified) {
return new OpenButNotNotifiedClaim(
claimsOpeningListener,
referenceInCompany,
buildData()
);
}
return new ReadyToOpenClaim(
buildData(),
company
);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment