class ApplicationQueryFilterVisitor extends ServiceConfigQueryFilterVisitor {

    @Override
    protected Map<String, Set<String>> getConfigData(ServiceConfig serviceConfig) {
        @SuppressWarnings("unchecked")
        Map<String, Set<String>> appData = serviceConfig.getAttributes();

        // Add the name as it is not stored with the attributes
        appData.put("name", singleton(applicationName));

        // Extract the meta data for accessibility by the query filter visitor
        Set<String> metaData = appData.get("meta");
        for (String entry : metaData) {
            Set<String> attributeValue = emptySet();
            if (isNotEmpty(entry)) {
                String[] tokens = entry.split("=");
                if (tokens.length == 2) {
                    attributeValue = singleton(tokens[1]);
                }
            }
            if (entry.startsWith(CREATED_BY_ATTRIBUTE)) {
                appData.put("createdBy", attributeValue);
            } else if (entry.startsWith(CREATION_DATE_ATTRIBUTE)) {
                appData.put("creationDate", attributeValue);
            } else if (entry.startsWith(LAST_MODIFIED_BY_ATTRIBUTE)) {
                appData.put("lastModifiedBy", attributeValue);
            } else  if (entry.startsWith(LAST_MODIFIED_DATE_ATTRIBUTE)) {
                appData.put("lastModifiedDate", attributeValue);
            }
        }
        return appData;
    }

    public  ApplicationQueryFilterVisitor(String applicationName);

}