feat: Add FaceAI handoff URL builder and enhance race storage metadata handling
All checks were successful
Publish FaceAI Container / publish (push) Successful in 9m53s

This commit is contained in:
MaddoScientisto 2026-04-19 16:12:48 +02:00
commit 4f003bb5a9
5 changed files with 214 additions and 37 deletions

View file

@ -148,6 +148,14 @@ private boolean faceAiLookupHasResolvedPhoto(Object foto) {
&& faceAiLookupLong(faceAiLookupInvoke(foto, "getId_foto", null, null)) > 0L;
}
private boolean faceAiLookupMatchesRace(Object foto, long raceId) {
if (raceId <= 0L) {
return true;
}
return faceAiLookupLong(faceAiLookupInvoke(foto, "getId_gara", null, null)) == raceId;
}
private Object faceAiLookupResolvePhoto(Class fotoClass, Constructor constructor, Object apFull, String photoId, String normalizedPhotoId, String fileName, long raceId, long[] puntoFotoIds) throws Exception {
Method findByPrimaryKey = fotoClass.getMethod("findByPrimaryKey", new Class[] { long.class });
Method findByFoto = fotoClass.getMethod("findByFoto", new Class[] { String.class });
@ -158,7 +166,7 @@ private Object faceAiLookupResolvePhoto(Class fotoClass, Constructor constructor
if (photoId.matches("^\\d+$")) {
Object foto = faceAiLookupInstantiateFoto(fotoClass, constructor, apFull);
findByPrimaryKey.invoke(foto, new Object[] { Long.valueOf(Long.parseLong(photoId)) });
if (faceAiLookupHasResolvedPhoto(foto)) {
if (faceAiLookupHasResolvedPhoto(foto) && faceAiLookupMatchesRace(foto, raceId)) {
return foto;
}
}
@ -166,8 +174,7 @@ private Object faceAiLookupResolvePhoto(Class fotoClass, Constructor constructor
String[] fotoCandidates = new String[] {
photoId,
normalizedPhotoId,
compositeFileName,
fileName
compositeFileName
};
for (int index = 0; index < fotoCandidates.length; index++) {
String candidate = faceAiLookupTrim(fotoCandidates[index]);
@ -177,7 +184,7 @@ private Object faceAiLookupResolvePhoto(Class fotoClass, Constructor constructor
Object foto = faceAiLookupInstantiateFoto(fotoClass, constructor, apFull);
findByFoto.invoke(foto, new Object[] { candidate });
if (faceAiLookupHasResolvedPhoto(foto)) {
if (faceAiLookupHasResolvedPhoto(foto) && faceAiLookupMatchesRace(foto, raceId)) {
return foto;
}
}
@ -212,6 +219,14 @@ private Object faceAiLookupResolvePhoto(Class fotoClass, Constructor constructor
}
}
if (fileName.length() > 0 && raceId <= 0L && faceAiLookupIsSafeValue(fileName)) {
Object foto = faceAiLookupInstantiateFoto(fotoClass, constructor, apFull);
findByFoto.invoke(foto, new Object[] { fileName });
if (faceAiLookupHasResolvedPhoto(foto)) {
return foto;
}
}
return faceAiLookupInstantiateFoto(fotoClass, constructor, apFull);
}

View file

@ -66,31 +66,59 @@ String faceAiRaceYear = "";
String faceAiRaceMonthFolder = "";
String faceAiRaceFolder = "";
String faceAiRaceStorageRelativeDir = "";
String faceAiExpectedYear = "";
String faceAiExpectedMonthFolder = "";
if (faceAiRaceDate != null) {
java.util.Calendar faceAiCalendar = java.util.Calendar.getInstance();
String[] faceAiMonthNames = new String[] { "GENNAIO", "FEBBRAIO", "MARZO", "APRILE", "MAGGIO", "GIUGNO", "LUGLIO", "AGOSTO", "SETTEMBRE", "OTTOBRE", "NOVEMBRE", "DICEMBRE" };
int faceAiMonthIndex;
faceAiCalendar.setTime(faceAiRaceDate);
faceAiExpectedYear = String.valueOf(faceAiCalendar.get(java.util.Calendar.YEAR));
faceAiMonthIndex = faceAiCalendar.get(java.util.Calendar.MONTH);
faceAiExpectedMonthFolder = String.format("%02d.%s", new Object[] { Integer.valueOf(faceAiMonthIndex + 1), faceAiMonthNames[faceAiMonthIndex] });
}
if (!faceAiRacePathBase.isEmpty()) {
String[] faceAiPathSegments = faceAiRacePathBase.split("/");
String[] faceAiPathSegments = faceAiRacePathBase.replace('\\', '/').split("/");
java.util.ArrayList faceAiNormalizedSegments = new java.util.ArrayList();
int faceAiYearIndex = -1;
for (int faceAiSegmentIndex = 0; faceAiSegmentIndex < faceAiPathSegments.length; faceAiSegmentIndex++) {
String faceAiSegment = faceAiPathSegments[faceAiSegmentIndex] != null ? faceAiPathSegments[faceAiSegmentIndex].trim() : "";
if (!faceAiSegment.isEmpty()) {
faceAiNormalizedSegments.add(faceAiSegment);
}
}
if (faceAiNormalizedSegments.size() > 0) {
for (int faceAiSegmentIndex = 0; faceAiSegmentIndex < faceAiNormalizedSegments.size(); faceAiSegmentIndex++) {
String faceAiSegment = (String) faceAiNormalizedSegments.get(faceAiSegmentIndex);
if (faceAiSegment.matches("^\\d{4}$")) {
faceAiRaceYear = faceAiSegment;
faceAiYearIndex = faceAiSegmentIndex;
break;
}
}
if (faceAiYearIndex >= 0) {
if (faceAiNormalizedSegments.size() > faceAiYearIndex + 1) {
faceAiRaceMonthFolder = (String) faceAiNormalizedSegments.get(faceAiYearIndex + 1);
}
if (faceAiNormalizedSegments.size() > faceAiYearIndex + 2) {
faceAiRaceFolder = (String) faceAiNormalizedSegments.get(faceAiYearIndex + 2);
}
} else if (faceAiNormalizedSegments.size() > 0) {
faceAiRaceYear = (String) faceAiNormalizedSegments.get(0);
}
if (faceAiNormalizedSegments.size() > 1) {
faceAiRaceMonthFolder = (String) faceAiNormalizedSegments.get(1);
}
if (faceAiNormalizedSegments.size() > 2) {
faceAiRaceFolder = (String) faceAiNormalizedSegments.get(2);
} else if (faceAiNormalizedSegments.size() > 1) {
faceAiRaceFolder = (String) faceAiNormalizedSegments.get(faceAiNormalizedSegments.size() - 1);
if (faceAiNormalizedSegments.size() > 1) {
faceAiRaceMonthFolder = (String) faceAiNormalizedSegments.get(1);
}
if (faceAiNormalizedSegments.size() > 2) {
faceAiRaceFolder = (String) faceAiNormalizedSegments.get(2);
} else if (faceAiNormalizedSegments.size() > 1) {
faceAiRaceFolder = (String) faceAiNormalizedSegments.get(faceAiNormalizedSegments.size() - 1);
}
}
}
if (faceAiRaceYear.isEmpty() && faceAiRaceDate != null) {
java.util.Calendar faceAiCalendar = java.util.Calendar.getInstance();
faceAiCalendar.setTime(faceAiRaceDate);
faceAiRaceYear = String.valueOf(faceAiCalendar.get(java.util.Calendar.YEAR));
if (!faceAiExpectedYear.isEmpty() && !faceAiExpectedYear.equals(faceAiRaceYear)) {
faceAiRaceYear = faceAiExpectedYear;
}
if (!faceAiExpectedMonthFolder.isEmpty() && !faceAiExpectedMonthFolder.equals(faceAiRaceMonthFolder)) {
faceAiRaceMonthFolder = faceAiExpectedMonthFolder;
}
if (faceAiRaceFolder.isEmpty()) {
faceAiRaceFolder = String.valueOf(CR.getGara().getId_gara());

View file

@ -66,31 +66,59 @@ String faceAiRaceYear = "";
String faceAiRaceMonthFolder = "";
String faceAiRaceFolder = "";
String faceAiRaceStorageRelativeDir = "";
String faceAiExpectedYear = "";
String faceAiExpectedMonthFolder = "";
if (faceAiRaceDate != null) {
java.util.Calendar faceAiCalendar = java.util.Calendar.getInstance();
String[] faceAiMonthNames = new String[] { "GENNAIO", "FEBBRAIO", "MARZO", "APRILE", "MAGGIO", "GIUGNO", "LUGLIO", "AGOSTO", "SETTEMBRE", "OTTOBRE", "NOVEMBRE", "DICEMBRE" };
int faceAiMonthIndex;
faceAiCalendar.setTime(faceAiRaceDate);
faceAiExpectedYear = String.valueOf(faceAiCalendar.get(java.util.Calendar.YEAR));
faceAiMonthIndex = faceAiCalendar.get(java.util.Calendar.MONTH);
faceAiExpectedMonthFolder = String.format("%02d.%s", new Object[] { Integer.valueOf(faceAiMonthIndex + 1), faceAiMonthNames[faceAiMonthIndex] });
}
if (!faceAiRacePathBase.isEmpty()) {
String[] faceAiPathSegments = faceAiRacePathBase.split("/");
String[] faceAiPathSegments = faceAiRacePathBase.replace('\\', '/').split("/");
java.util.ArrayList faceAiNormalizedSegments = new java.util.ArrayList();
int faceAiYearIndex = -1;
for (int faceAiSegmentIndex = 0; faceAiSegmentIndex < faceAiPathSegments.length; faceAiSegmentIndex++) {
String faceAiSegment = faceAiPathSegments[faceAiSegmentIndex] != null ? faceAiPathSegments[faceAiSegmentIndex].trim() : "";
if (!faceAiSegment.isEmpty()) {
faceAiNormalizedSegments.add(faceAiSegment);
}
}
if (faceAiNormalizedSegments.size() > 0) {
for (int faceAiSegmentIndex = 0; faceAiSegmentIndex < faceAiNormalizedSegments.size(); faceAiSegmentIndex++) {
String faceAiSegment = (String) faceAiNormalizedSegments.get(faceAiSegmentIndex);
if (faceAiSegment.matches("^\\d{4}$")) {
faceAiRaceYear = faceAiSegment;
faceAiYearIndex = faceAiSegmentIndex;
break;
}
}
if (faceAiYearIndex >= 0) {
if (faceAiNormalizedSegments.size() > faceAiYearIndex + 1) {
faceAiRaceMonthFolder = (String) faceAiNormalizedSegments.get(faceAiYearIndex + 1);
}
if (faceAiNormalizedSegments.size() > faceAiYearIndex + 2) {
faceAiRaceFolder = (String) faceAiNormalizedSegments.get(faceAiYearIndex + 2);
}
} else if (faceAiNormalizedSegments.size() > 0) {
faceAiRaceYear = (String) faceAiNormalizedSegments.get(0);
}
if (faceAiNormalizedSegments.size() > 1) {
faceAiRaceMonthFolder = (String) faceAiNormalizedSegments.get(1);
}
if (faceAiNormalizedSegments.size() > 2) {
faceAiRaceFolder = (String) faceAiNormalizedSegments.get(2);
} else if (faceAiNormalizedSegments.size() > 1) {
faceAiRaceFolder = (String) faceAiNormalizedSegments.get(faceAiNormalizedSegments.size() - 1);
if (faceAiNormalizedSegments.size() > 1) {
faceAiRaceMonthFolder = (String) faceAiNormalizedSegments.get(1);
}
if (faceAiNormalizedSegments.size() > 2) {
faceAiRaceFolder = (String) faceAiNormalizedSegments.get(2);
} else if (faceAiNormalizedSegments.size() > 1) {
faceAiRaceFolder = (String) faceAiNormalizedSegments.get(faceAiNormalizedSegments.size() - 1);
}
}
}
if (faceAiRaceYear.isEmpty() && faceAiRaceDate != null) {
java.util.Calendar faceAiCalendar = java.util.Calendar.getInstance();
faceAiCalendar.setTime(faceAiRaceDate);
faceAiRaceYear = String.valueOf(faceAiCalendar.get(java.util.Calendar.YEAR));
if (!faceAiExpectedYear.isEmpty() && !faceAiExpectedYear.equals(faceAiRaceYear)) {
faceAiRaceYear = faceAiExpectedYear;
}
if (!faceAiExpectedMonthFolder.isEmpty() && !faceAiExpectedMonthFolder.equals(faceAiRaceMonthFolder)) {
faceAiRaceMonthFolder = faceAiExpectedMonthFolder;
}
if (faceAiRaceFolder.isEmpty()) {
faceAiRaceFolder = String.valueOf(CR.getGara().getId_gara());