Implémentation de la classe Java pour la recherche avancée de designs
Après avoir instancié le point d'extension com.ibm.pdp.maf.rpp.mafAdvancedSearchPattern, vous devez coder en Java la classe qui implémente ses traitements. Elle reçoit le paramétrage du pattern et l'applique aux instances concernées par le pattern. Elle contribue à la constitution de la liste des résultats.
Procédure
Exemple
L'exemple suivant illustre l'implémentation de la classe ProgramByPgmID, qui
liste les instances de Programmes d'après leur code programme généré. Cette classe implémente un
pattern de type
STRING.
public class ProgramByPgmID extends MAFAbstractAdvancedSearchPattern {
public boolean accept(Object radicalElement, Map<String, Object> parameters, StringBuilder decoration) {
if (!(radicalElement instanceof Program))
return false;
Program program = (Program) radicalElement;
String expression = (String) parameters.get(IMAFAdvancedSearchPattern._STRING_EXPRESSION);
boolean caseSensitive = (Boolean) parameters.get(IMAFAdvancedSearchPattern._CASE_SENSITIVE);
Pattern pattern = getPattern(expression, caseSensitive);
if (pattern.matcher(program.getProgramId()).matches()) {
decoration.append(program.getProgramId());
return true;
}
return false;
}
}
L'exemple suivant illustre l'implémentation de la classe
ProgramByMacroCallNumber, qui liste les instances de Programmes d'après le nombre
de leurs appels de Macros. Cette classe implémente un pattern de type
INTEGER.
public ProgramByMacroCallNumber() {
}
public boolean accept(Object radicalElement, Map<String, Object> parameters, StringBuilder decoration) {
if (!(radicalElement instanceof Program))
return false;
int value = (Integer) parameters.get(IMAFAdvancedSearchPattern._INTEGER_VALUE);
String operand = (String) parameters.get(IMAFAdvancedSearchPattern._INTEGER_OPERAND);
Program program = (Program) radicalElement;
int size = program.getCPLines().size();
switch (operand) {
case IMAFAdvancedSearchPattern._LOWER:
return size < value;
case IMAFAdvancedSearchPattern._LOWER_EQUAL:
return size <= value;
case IMAFAdvancedSearchPattern._EQUAL:
return size == value;
case IMAFAdvancedSearchPattern._GREATER_EQUAL:
return size >= value;
case IMAFAdvancedSearchPattern._GREATER:
return size > value;
}
return false;
}
}
L'exemple suivant illustre l'implémentation de la classe ProgramNameEqualsPgmID,
qui liste les instances de Programmes dont le nom et le code programme généré sont identiques. Cette
classe implémente un pattern de type
BOOLEAN.
public class ProgramNameEqualsPgmID extends MAFAbstractAdvancedSearchPattern {
public boolean accept(Object radicalElement, Map<String, Object> parameters, StringBuilder decoration) {
if (!(radicalElement instanceof Program))
return false;
Program program = (Program) radicalElement;
if (program.getName().equals(program.getProgramId()))
return true;
return false;
}
}
L'exemple suivant illustre le début de l'implémentation de la classe
ProgramMultiCriteria, qui liste les instances de Programmes selon plusieurs
critères. Cet exemple comprend trois critères : une chaîne de caractères, un nombre et un booléen.
Le détail de l'implémentation de chaque paramètre n'est pas indiqué car il est très variable. Cette
classe implémente un pattern de type
COMPOSITE.
public class ProgramMultiCriteria extends MAFAbstractAdvancedSearchPattern {
public ProgramMultiCriteria() {
}
public boolean accept(Object radicalElement, Map<String, Object> parameters, StringBuilder decoration) {
if (!(radicalElement instanceof Program))
return false;
String stringParameter = (String) parameters.get("parameter1");
Integer integerParameter = (Integer) parameters.get("parameter2");
Boolean booleanParameter = (Boolean) parameters.get("parameter3");
Program program = (Program) radicalElement;
// ...
return true;
}
}