class BackendExperimentalFeaturesRegistryServiceImpl implements ExperimentalFeaturesRegistryService,
                                                                       BackendExperimentalFeaturesRegistryService,
                                                                       FeaturesEditorService {

    @Override
    public void save(EditableExperimentalFeature editableFeature) {

        if(!isExperimentalEnabled()) {
            throw new IllegalStateException("Impossible edit feature '" + editableFeature.getFeatureId() + "': Experimental Framework is disabled");
        }

        Optional<ExperimentalFeatureDefinition> optional = Optional.ofNullable(defRegistry.getFeatureById(editableFeature.getFeatureId()));

        if (optional.isPresent()) {
            ExperimentalFeatureImpl feature = new ExperimentalFeatureImpl(editableFeature.getFeatureId(), editableFeature.isEnabled());

            globalStorage.store(feature);
        } else {
            throw new IllegalArgumentException("Cannot find ExperimentalFeature '" + editableFeature.getFeatureId() + "'");
        }
    }

    @Inject public  BackendExperimentalFeaturesRegistryServiceImpl(final ExperimentalFeatureDefRegistry defRegistry, @Named("global") final ExperimentalFeaturesStorage globalStorage);

}