protected int getMatchingRate()

in services/idp-core/src/main/java/org/apache/cxf/fediz/service/idp/rest/QueryResourceInfoComparator.java [70:113]


    protected int getMatchingRate(final OperationResourceInfo operation, final Message message) {
        List<Parameter> params = operation.getParameters();
        if (params == null || params.isEmpty()) {
            return 0;
        }

        // Get Request QueryParams
        String query = (String) message.get(Message.QUERY_STRING);
        String path = (String) message.get(Message.REQUEST_URI);
        Map<String, List<String>> qParams = JAXRSUtils.getStructuredParams(query, "&", true, false);
        Map<String, List<String>> mParams = JAXRSUtils.getMatrixParams(path, true);
        // Get Request Headers
        Map<?, ?> qHeader = (java.util.Map<?, ?>) message.get(Message.PROTOCOL_HEADERS);

        int rate = 0;
        for (Parameter p : params) {
            switch (p.getType()) {
            case QUERY:
                if (qParams.containsKey(p.getName())) {
                    rate += 2;
                } else if (p.getDefaultValue() == null) {
                    rate -= 1;
                }
                break;
            case MATRIX:
                if (mParams.containsKey(p.getName())) {
                    rate += 2;
                } else if (p.getDefaultValue() == null) {
                    rate -= 1;
                }
                break;
            case HEADER:
                if (qHeader.containsKey(p.getName())) {
                    rate += 2;
                } else if (p.getDefaultValue() == null) {
                    rate -= 1;
                }
                break;
            default:
                break;
            }
        }
        return rate;
    }