|
|
|
|
Bonjour,
j'ai un souci concernant le codage des méthodes car je ne sais pas comment m'y prendre.
Pourriez-vous m'aider
Merci
import java.util.regex.Pattern;
public interface QueryFactory {
public Query query(CharSequence word);
public Query query(Pattern pattern);
public Query or(Query query1,Query query2);
public Query and(Query query1,Query query2);
}
public class QueryFacoryImpl implements QueryFactory {
public Query query(CharSequence word) {
// construction d'un objet query en fonction de word
//return query;
}
public Query query(Pattern pattern) {
// construction d'un objet query en fonction de pattern
//return query;
}
public Query or(Query query1,Query query2) {
// construction d'un objet query en fonction de query1 et query2
//return query;
}
public Query and(Query query1,Query query2) {
// construction d'un objet query en fonction de query1 et query2
//return query;
}
}Bonjour,
public interface Query {
public Iterable<? extends Result> execute();
public Iterable<? extends Result> execute(int maxCount);
}
Cette interface sert à utiliser les &, |, les expressions rationnelles ou les expressions "simples"
import java.util.regex.Pattern;
public interface QueryFactory {
public Query query(CharSequence word);
public Query query(Pattern pattern);
public Query or(Query query1,Query query2);
public Query and(Query query1,Query query2);
}
Ce que j'avais codé mais qu'il faut adapter je tasse un peu le code dans mon post pour des raisons de place...) J'ai une interface IMatcher qui se charge de dire si le texte donné est "bon" : public interface IMatcher
{
public boolean matches(String value);
}
Ensuite j'ai plusieurs Matchers spécialisés qui implémentent cette interface. Certains sont des matchers "simples" (qui travaillent sur une simple chaîne de référence) : public class ContainsMatcher implements IMatcher
{
private final String reference;
public ContainsMatcher(String reference)
{ this.reference = reference;
}
public boolean matches(String value)
{ return value.contains(reference);
}
}
Et certains sont "composites" (ils utilisent d'autres matchers pour déterminer si le texte est "bon") : public class AndMatcher implements IMatcher
{
private final IMatcher matcher1;
private final IMatcher matcher2;
public AndMatcher(IMatcher matcher1, IMatcher matcher2)
{
this.matcher1 = matcher1;
this.matcher2 = matcher2;
}
public boolean matches(String value)
{ return ( matcher1.matches(value) && matcher2.matches(value) );
}
}
Ensuite, j'ai une MatcherFactory, à qui on donne l'expression de recherche ("& titi toto"), et qui se charge de l'analyser et de construire la hiérarchie des Matchers correspondante : public class MatcherFactory
{
// C'est la méthode publique que notre programme va appeler
public static IMatcher createMatcher(String pattern)
{
ArrayList<String> expList = new ArrayList<String>(Arrays.asList(pattern.split("\\s+")));
return getSpecializedMatcher(expList);
}
// Méthode récursive, qui lit le premier élément de la liste des expressions, et
// renvoie le Matcher correspondant.
private static IMatcher getSpecializedMatcher(List<String> expList)
{
String exp = expList.remove(0);
if ("&".equals(exp))
{
IMatcher operand1 = getSpecializedMatcher(expList);
IMatcher operand2 = getSpecializedMatcher(expList);
return new AndMatcher(operand1, operand2);
}
else if ("|".equals(exp))
{
IMatcher operand1 = getSpecializedMatcher(expList);
IMatcher operand2 = getSpecializedMatcher(expList);
return new OrMatcher(operand1, operand2);
}
else if (exp.startsWith("@"))
{ return new RegexMatcher(exp.substring(1));
}
else if (exp.startsWith("!"))
{ return new ExactMatcher(exp.substring(1));
}
else
{ return new ContainsMatcher(exp);
}
}
}
|