class ThingsFieldExpressionFactoryImpl implements ThingsFieldExpressionFactory {

    @Override
    public SortFieldExpression sortBy(final String propertyNameWithOptionalLeadingSlash)
            throws IllegalArgumentException {

        requireNonNull(propertyNameWithOptionalLeadingSlash);
        final String propertyName = stripLeadingSlash(propertyNameWithOptionalLeadingSlash);

        return FieldExpressionUtil.parseFeatureField(requireNonNull(propertyName))
                .flatMap(f -> f.getFeatureId()
                        .flatMap(id -> f.getProperty()
                                .flatMap(property -> Optional
                                        .of((SortFieldExpression) new FeatureIdPropertyExpressionImpl(id, property))
                                )
                        )
                )
                .orElseGet(() -> (SortFieldExpression) common(propertyName));
    }

    public  ThingsFieldExpressionFactoryImpl();
    public  ThingsFieldExpressionFactoryImpl(final Map<String, String> simpleFieldMappings);

}