class PopulateParameterNames implements IDatabaseStatement {

    public static void verify() {
        Properties props = new Properties();
        boolean found = false;
        try (InputStream fis =
                PopulateParameterNames.class.getClassLoader().getResourceAsStream("parameter_names.properties")) {
            props.load(fis);

            Set<String> codes = new HashSet<>();
            for (SearchParamType.ValueSet spt : SearchParamType.ValueSet.values()) {
                Collection<SearchParameter> searchParametersForResourceType =
                        FHIRRegistry.getInstance().getSearchParameters(spt.value());
                for (SearchParameter searchParameter : searchParametersForResourceType) {
                    codes.add(searchParameter.getCode().getValue());
                }
            }

            // Sort Codes based on where system prefix '_' comes first.
            List<String> codesList = new ArrayList<>(codes);
            Collections.sort(codesList);

            // Find the Highest Value to start from:
            Integer highestValue = 1001;
            Map<String, Integer> valueMap = new HashMap<>();
            for (Entry<Object, Object> valueEntry : props.entrySet()) {
                Integer curVal = Integer.parseInt((String) valueEntry.getValue());
                String resource = (String) valueEntry.getKey();
                valueMap.put(resource, curVal);
                if (highestValue < curVal) {
                    highestValue = curVal;
                }
                codes.remove(resource);
            }

            // Check to see if something is missing
            for (String code : codes.stream().sorted().collect(Collectors.toList())) {
                LOGGER.info(code + "=" + highestValue++);
                found = true;
            }
        } catch (IOException e) {
            throw new IllegalArgumentException("File access issue for parameter_names");
        }

        if (found) {
            throw new IllegalArgumentException("Parameter Name/Code are missing from parameter_names");
        }
    }

    public  PopulateParameterNames(String adminSchemaName, String schemaName, Integer tenantId);

}