docs: @Override
  	public Set<ResourceIndexedSearchParamDate> extractSearchParamDates(ResourceTable theEntity, IBaseResource theResource) {
  		HashSet<ResourceIndexedSearchParamDate> retVal = new HashSet<>();
  
  		Collection<RuntimeSearchParam> searchParams = getSearchParams(theResource);
  		for (RuntimeSearchParam nextSpDef : searchParams) {
  			if (nextSpDef.getParamType() != RestSearchParameterTypeEnum.DATE) {
  				continue;
  			}
  
  			String nextPath = nextSpDef.getPath();
  			if (isBlank(nextPath)) {
  				continue;
  			}
  
  			boolean multiType = false;
  			if (nextPath.endsWith("[x]")) {
  				multiType = true;
  			}
  
  			for (Object nextObject : extractValues(nextPath, theResource)) {
  				if (nextObject == null) {
  					continue;
  				}
  
  				ResourceIndexedSearchParamDate nextEntity;
  				if (nextObject instanceof BaseDateTimeType) {
  					BaseDateTimeType nextValue = (BaseDateTimeType) nextObject;
  					if (nextValue.isEmpty()) {
  						continue;
  					}
  					nextEntity = new ResourceIndexedSearchParamDate(nextSpDef.getName(), nextValue.getValue(), nextValue.getValue(), nextValue.getValueAsString());
  				} else if (nextObject instanceof Period) {
  					Period nextValue = (Period) nextObject;
  					if (nextValue.isEmpty()) {
  						continue;
  					}
  					nextEntity = new ResourceIndexedSearchParamDate(nextSpDef.getName(), nextValue.getStart(), nextValue.getEnd(), nextValue.getStartElement().getValueAsString());
  				} else if (nextObject instanceof Timing) {
  					Timing nextValue = (Timing) nextObject;
  					if (nextValue.isEmpty()) {
  						continue;
  					}
  					TreeSet<Date> dates = new TreeSet<>();
  					String firstValue = null;
  					for (DateTimeType nextEvent : nextValue.getEvent()) {
  						if (nextEvent.getValue() != null) {
  							dates.add(nextEvent.getValue());
  							if (firstValue == null) {
  								firstValue = nextEvent.getValueAsString();
  							}
  						}
  					}
  					if (dates.isEmpty()) {
  						continue;
  					}
  
  					nextEntity = new ResourceIndexedSearchParamDate(nextSpDef.getName(), dates.first(), dates.last(), firstValue);
  				} else if (nextObject instanceof StringType) {
  					// CarePlan.activitydate can be a string
  					continue;
  				} else {
  					if (!multiType) {
  						throw new ConfigurationException("Search param " + nextSpDef.getName() + " is of unexpected datatype: " + nextObject.getClass());
  					} else {
  						continue;
  					}
  				}
  				if (nextEntity != null) {
  					nextEntity.setResource(theEntity);
  					retVal.add(nextEntity);
  				}
  			}
  		}
  
  		return retVal;
  	}