Stephan Mueller était heureux d'apprendre que son collègue, le "spécialiste" avait finalement quitté la société. Son collègue avait gagné son titre honorifique grâce son étrange pouvoir de transformer tout ce qu'il touchait en un ramassis de fichiers source inmaintenable et à peine compilable : Les méthodes enflaient de milliers de lignes de code, les clauses "case" s'embranchaient sur dix niveaux, etc.

Alors qu'il parcourait ses « œuvres », Stephan découvrit le Quadratri : cette méthode triait une liste de noms de fichiers formatés en "YYYYDDHH.ext". Bien sûr, utiliser la méthode existante Collections.Sort() aurait fait l'affaire; le format étant, après tout, pensé pour le tri alphanumérique. Mais forcé d'admettre que, le Quadratri est beaucoup, beaucoup plus ... spécial.

public void sortFiles(Vector filesVector) {
int len = filesVector.size();
int i;
String filesArray[] = new String[len];
for (i = 0; i < len; i++)
filesArray[i] = (String) filesVector.get(i);
filesVector.clear();
len = filesArray.length - 1;
String valA, valB;
int countA, countB, countYearA, countYearB, countMonthA, countMonthB, countDayA, countDayB;
while (len > 0) {
for (i = 0; i < len; i++) {
valA = filesArray[i];
valB = filesArray[i + 1];
try {
countA = Integer.parseInt(valA.substring(0, 4));
countB = Integer.parseInt(valB.substring(0, 4));
if (countA <= countB)
continue;
filesArray[i] = valB;
filesArray[i + 1] = valA;
} catch (NumberFormatException nfe) {
Log.log( ERROR1+nfe.getMessage() , NPSLOGGER );
}
}
len--;
}
len = filesArray.length - 1;
while (len > 0) {
for (i = 0; i < len; i++) {
valA = filesArray[i];
valB = filesArray[i + 1];
try {
countYearA = Integer.parseInt(valA.substring(0, 4));
countYearB = Integer.parseInt(valB.substring(0, 4));
countA = Integer.parseInt(valA.substring(4, 6));
countB = Integer.parseInt(valB.substring(4, 6));
if (countYearA < countYearB)
continue;
if (countA <= countB)
continue;
filesArray[i] = valB;
filesArray[i + 1] = valA;
} catch (NumberFormatException nfe) {
Log.log( ERROR1+nfe.getMessage() , NPSLOGGER );
}
}
len--;
}
len = filesArray.length - 1;
while (len > 0) {
for (i = 0; i < len; i++) {
valA = filesArray[i];
valB = filesArray[i + 1];
try {
countYearA = Integer.parseInt(valA.substring(0, 4));
countYearB = Integer.parseInt(valB.substring(0, 4));
countMonthA = Integer.parseInt(valA.substring(4, 6));
countMonthB = Integer.parseInt(valB.substring(4, 6));
countA = Integer.parseInt(valA.substring(6, 8));
countB = Integer.parseInt(valB.substring(6, 8));
if (countYearA < countYearB)
continue;
if (countMonthA < countMonthB)
continue;
if (countA <= countB)
continue;
filesArray[i] = valB;
filesArray[i + 1] = valA;
} catch (NumberFormatException nfe) {
Log.log( ERROR1+nfe.getMessage() , NPSLOGGER );
}
}
len--;
}
len = filesArray.length - 1;
while (len > 0) {
for (i = 0; i < len; i++) {
valA = filesArray[i];
valB = filesArray[i + 1];
try {
countYearA = Integer.parseInt(valA.substring(0, 4));
countYearB = Integer.parseInt(valB.substring(0, 4));
countMonthA = Integer.parseInt(valA.substring(4, 6));
countMonthB = Integer.parseInt(valB.substring(4, 6));
countDayA = Integer.parseInt(valA.substring(6, 8));
countDayB = Integer.parseInt(valB.substring(6, 8));
countA = Integer.parseInt(valA.substring(8, 10));
countB = Integer.parseInt(valB.substring(8, 10));
if (countYearA < countYearB)
continue;
if (countMonthA < countMonthB)
continue;
if (countDayA < countDayB)
continue;
if (countA <= countB)
continue;
filesArray[i] = valB;
filesArray[i + 1] = valA;
} catch (NumberFormatException nfe) {
Log.log( ERROR1+nfe.getMessage() , NPSLOGGER );
}
}
len--;
}
len = filesArray.length;
for (i = 0; i < len; i++)
filesVector.add(i, filesArray[i]);
}