Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -188,10 +188,15 @@ private List<Object> getParts(Object object) {
*/
private Stream<Attachment> getRealAttachments(Statement statement) {

Stream<Attachment> stream;

// handle the rare scenario when a sub-statement has an attachment
var stream = statement.getObject() instanceof final SubStatement substatement
&& substatement.getAttachments() != null ? substatement.getAttachments().stream()
: Stream.<Attachment>empty();
if (statement.getObject() instanceof final SubStatement substatement
&& substatement.getAttachments() != null) {
stream = substatement.getAttachments().stream();
} else {
stream = Stream.empty();
}

if (statement.getAttachments() != null) {
stream = Stream.concat(stream, statement.getAttachments().stream());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -210,11 +210,10 @@ private static String sha256Hex(byte[] data) {
final var hash = digest.digest(data);
final var hexString = new StringBuilder(2 * hash.length);
for (final byte element : hash) {
final var hex = Integer.toHexString(0xff & element);
if (hex.length() == 1) {
hexString.append('0');
}
hexString.append(hex);
// Use bitwise operations to avoid string allocation per byte
final int value = 0xff & element;
hexString.append(Character.forDigit(value >>> 4, 16));
hexString.append(Character.forDigit(value & 0x0f, 16));
}
return hexString.toString();
}
Expand Down
15 changes: 10 additions & 5 deletions xapi-model/src/main/java/dev/learning/xapi/model/LanguageMap.java
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,11 @@ public class LanguageMap extends LinkedHashMap<Locale, String> {

private static final long serialVersionUID = 7375610804995032187L;

/**
* Cached undefined locale instance to avoid repeated object creation.
*/
private static final Locale UNDEFINED_LOCALE = new Locale("und");

/**
* Constructs an empty LanguageMap.
*/
Expand All @@ -49,7 +54,7 @@ public LanguageMap(Map<Locale, String> languageMap) {
* @param value to be added with the undefined locale as a key
*/
public void put(String value) {
this.put(new Locale("und"), value);
this.put(UNDEFINED_LOCALE, value);
}

/**
Expand Down Expand Up @@ -83,15 +88,15 @@ public String get(List<LanguageRange> languageRanges) {
}

// Otherwise return UND
final var und = get(new Locale("und"));
final var und = get(UNDEFINED_LOCALE);
if (und != null) {
return und;
}

// Otherwise return first
final var first = keySet().stream().findFirst();
if (first.isPresent()) {
return get(first.get());
final var iterator = keySet().iterator();
if (iterator.hasNext()) {
return get(iterator.next());
}

// Map must be empty
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,14 @@ public class MboxValidator extends DisableableValidator<Mbox, String> {

public static final String PREFIX = "mailto:";

EmailValidator emailValidator;
/**
* Cached email validator instance to avoid repeated object creation.
*/
private static final EmailValidator EMAIL_VALIDATOR = new EmailValidator();

@Override
public void initialize(Mbox mbox) {

emailValidator = new EmailValidator();
// No initialization needed - using static validator
}

@Override
Expand All @@ -36,7 +38,7 @@ public boolean isValidIfEnabled(String value, ConstraintValidatorContext context
}

return value.startsWith(PREFIX)
&& emailValidator.isValid(value.substring(PREFIX.length()), context);
&& EMAIL_VALIDATOR.isValid(value.substring(PREFIX.length()), context);
}

}