@Override
    public boolean select(GroupedParameterizedElement element) {
      if (!element.hasParameterBag(this.bagKey)) return false;

      ParameterBag bag = element.getParameterBag(this.bagKey);
      if (!bag.hasParameter(this.paramKey)) return false;

      ListParameter<U> param = bag.getParameter(this.paramKey);
      return param.getValue().containsAll(this.value);
    }
    @Override
    public boolean select(GroupedParameterizedElement element) {
      if (!element.hasParameterBag(this.bagKey)) return false;

      ParameterBag bag = element.getParameterBag(this.bagKey);
      if (!bag.hasParameter(this.paramKey)) return false;

      DurationParameter param = bag.getParameter(this.paramKey);
      return param.getValue().equals(this.value);
    }
    @Override
    public boolean select(GroupedParameterizedElement element) {
      if (!element.hasParameterBag(this.bagKey)) return false;

      ParameterBag bag = element.getParameterBag(this.bagKey);
      if (!bag.hasParameter(this.paramKey)) return false;

      DateParameter param = bag.getParameter(this.paramKey);
      Date value = param.getValue();

      return this.dateRange.contains(value);
    }
    @Override
    public boolean select(GroupedParameterizedElement element) {

      if (!element.hasParameterBag(this.bagKey)) return false;

      ParameterBag bag = element.getParameterBag(this.bagKey);
      if (!bag.hasParameter(this.paramKey)) return false;

      StringParameter param = bag.getParameter(this.paramKey);
      String paramValue = param.getValue();

      return this.matchMode.matches(paramValue, this.value);
    }
    @Override
    public boolean select(GroupedParameterizedElement element) {

      ParameterBag bag = element.getParameterBag(this.bagKey);
      if (bag == null) {
        return false;
      }

      Parameter<?> parameter = bag.getParameter(this.paramKey);
      if (parameter == null) return false;

      String valueAsString = parameter.getValueAsString();
      return this.matchMode.matches(valueAsString, this.value);
    }