Author: bpoussin Date: 2012-04-06 12:00:12 +0200 (Fri, 06 Apr 2012) New Revision: 1468 Url: http://nuiton.org/repositories/revision/wikitty/1468 Log: optimisation in isAllowedWikitty, if collection is empty don't do search, juste return true Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/FieldTypeConstaintChecker.java Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/FieldTypeConstaintChecker.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/FieldTypeConstaintChecker.java 2012-04-06 09:47:10 UTC (rev 1467) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/FieldTypeConstaintChecker.java 2012-04-06 10:00:12 UTC (rev 1468) @@ -203,55 +203,59 @@ protected boolean isAllowedWikitty(String fqfield, FieldType field, Collection<String> ids, Collection<String> errors) { boolean result = false; + if (CollectionUtils.isEmpty(ids)) { + // si la liste est vide, alors on sait que la valeur est autorisee + result = true; + } else { + WikittyQuery q = null; + if (field.hasAllowedQuery()) { + // construire les requetes + q = WikittyQueryParser.parse(field.getAllowedQuery()); - WikittyQuery q = null; - if (field.hasAllowedQuery()) { - // construire les requetes - q = WikittyQueryParser.parse(field.getAllowedQuery()); - - } else if (field.hasAllowed()) { - WikittyQueryMaker maker = new WikittyQueryMaker().or(); - for (String extName : field.getAllowedAsList()) { - maker.exteq(extName); + } else if (field.hasAllowed()) { + WikittyQueryMaker maker = new WikittyQueryMaker().or(); + for (String extName : field.getAllowedAsList()) { + maker.exteq(extName); + } + q = maker.end(); } - q = maker.end(); - } - List<String> allowed = null; - if (q != null) { - q.setOffset(0); - q.setLimit(WikittyQuery.MAX); + List<String> allowed = null; + if (q != null) { + q.setOffset(0); + q.setLimit(WikittyQuery.MAX); - WikittyQuery wq = new WikittyQueryMaker().containsOne(Element.ID, ids).end(); - wq.setOffset(0); - wq.setLimit(WikittyQuery.MAX); + WikittyQuery wq = new WikittyQueryMaker().containsOne(Element.ID, ids).end(); + wq.setOffset(0); + wq.setLimit(WikittyQuery.MAX); - List<WikittyQueryResult<String>> queryResult = - ws.findAllByQuery(token, Arrays.asList(q, wq)); - allowed = queryResult.get(0).getAll(); - List<String> findedIds = queryResult.get(1).getAll(); + List<WikittyQueryResult<String>> queryResult = + ws.findAllByQuery(token, Arrays.asList(q, wq)); + allowed = queryResult.get(0).getAll(); + List<String> findedIds = queryResult.get(1).getAll(); - // on ne check que sur les ids trouve dans la base et on espere - // que les autres sont bon :). En fait, lorsqu'on store plusieurs - // wikitties en meme temps donc un wikitty qui doit etre la valeur - // d'un champs d'un autre. Celui ci n'est pas retrouvable dans la - // base et donc on ne peut pas verifier facilement la contrainte. - // Pour l'instant on ne fait rien, car les solutions seraient trop - // couteuse (creeer un storage in memory y mettre les objets a - // checker, faire le check en requetant le vrai repo et le in memory - // si tout va bien faire le store reel sur le vrai repo. - result = allowed.containsAll(findedIds); - if (log.isDebugEnabled() && findedIds.size() != ids.size()) { - log.debug(String.format( - "For field '%s' allowed contraint not checked for: %s", - fqfield, CollectionUtils.disjunction(findedIds, ids))); + // on ne check que sur les ids trouve dans la base et on espere + // que les autres sont bon :). En fait, lorsqu'on store plusieurs + // wikitties en meme temps donc un wikitty qui doit etre la valeur + // d'un champs d'un autre. Celui ci n'est pas retrouvable dans la + // base et donc on ne peut pas verifier facilement la contrainte. + // Pour l'instant on ne fait rien, car les solutions seraient trop + // couteuse (creeer un storage in memory y mettre les objets a + // checker, faire le check en requetant le vrai repo et le in memory + // si tout va bien faire le store reel sur le vrai repo. + result = allowed.containsAll(findedIds); + if (log.isDebugEnabled() && findedIds.size() != ids.size()) { + log.debug(String.format( + "For field '%s' allowed contraint not checked for: %s", + fqfield, CollectionUtils.disjunction(findedIds, ids))); + } } - } - if (errors != null && !result) { - errors.add(String.format( - "Field '%s' contains unallowed Wikitty values %s allowed %s", - fqfield, ids, allowed)); + if (errors != null && !result) { + errors.add(String.format( + "Field '%s' contains unallowed Wikitty values %s allowed %s", + fqfield, ids, allowed)); + } } return result; }