@Override
	public List<PersistCommune> rechercher(CommuneCritere critere) {
		Collection<PersistCommune> communes = null;
		if (null != critere.getDistrict()) {
			communes = mapParDistrict.get(critere.getDistrict().getId());
		} else if (null != critere.getCodeCanton()) {
			communes = mapParCanton.get(critere.getCodeCanton());
		} else {
			communes = mapParId.values();
		}
		FiltreCommuneComposite filtres = new FiltreCommuneComposite();
		if (null != critere.getDateValiditeApres() || null != critere.getDateValiditeAvant()) {
			filtres.ajouterFiltre(new FiltreCommuneDateValidite(critere.getDateValiditeAvant(),critere.getDateValiditeApres()));
		}
		if (!EnumSet.complementOf(critere.getType()).isEmpty()) {
			filtres.ajouterFiltre(new FiltreTypeCommune(critere.getType()));
		}
		return filtrer(communes,filtres);
	}