private Map<String, Integer> summerizeConstraints(Constraint[] constraints) {
        final HashMap<String, DimensionWeight> weightsMap = new HashMap<String, DimensionWeight>();
        for ( IDimension dimension : this.dimensions ) {
            weightsMap.put(dimension.getDottedName(), new DimensionWeight(dimension.getDottedName(), 0));
        }
        for ( Constraint constraint : constraints ) {
            ConstraintDimension[] combination = constraint.combination();
            for ( ConstraintDimension constraintDimension : combination ) {
                String dimensionAlias = constraintDimension.name();
                if ( weightsMap.containsKey(dimensionAlias) ) {
                    weightsMap.get(dimensionAlias).increment();
                } else {
                    throw new IllegalStateException("Illegal Dimension: " + dimensionAlias);
                }
            }
        }
        final ArrayList<DimensionWeight> weights = new ArrayList<DimensionWeight>(weightsMap.values());
        Collections.sort(weights);
        final HashMap<String, Integer> index = new HashMap<String, Integer>();
        for ( int i = 0; i < weights.size(); i++ ) {
            index.put(weights.get(i).getDottedName(), i);
        }
        return Collections.unmodifiableMap(index);
    }