class ThingsFieldExpressionFactoryImpl implements ThingsFieldExpressionFactory {

    @Override
    public ExistsFieldExpression existsBy(final String propertyNameWithOptionalLeadingSlash) {

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

        return FieldExpressionUtil.parseFeatureField(requireNonNull(propertyName))
                .flatMap(f -> f.getFeatureId()
                        .map(id -> f.getProperty()
                                .<ExistsFieldExpression>map(property ->
                                        new FeatureIdPropertyExpressionImpl(id, property))
                                // we have a feature id but no property path
                                .orElseGet(() -> new FeatureExpressionImpl(id))
                        )
                )
                // we have no feature at all, continue with the other possibilities
                .orElseGet(() -> (ExistsFieldExpression) common(propertyName));
    }

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

}