package org.glassfish.jersey.moxy.json;
import javax.ws.rs.Priorities;
import javax.ws.rs.core.Configuration;
import javax.ws.rs.core.Feature;
import javax.ws.rs.core.FeatureContext;
import org.glassfish.jersey.CommonProperties;
import org.glassfish.jersey.internal.InternalProperties;
import org.glassfish.jersey.internal.util.PropertiesHelper;
import org.glassfish.jersey.message.filtering.EntityFilteringFeature;
import org.glassfish.jersey.moxy.internal.MoxyFilteringFeature;
import org.glassfish.jersey.moxy.json.internal.ConfigurableMoxyJsonProvider;
import org.glassfish.jersey.moxy.json.internal.FilteringMoxyJsonProvider;
public class MoxyJsonFeature implements Feature {
private static final String JSON_FEATURE = MoxyJsonFeature.class.getSimpleName();
@Override
public boolean configure(final FeatureContext context) {
final Configuration config = context.getConfiguration();
if (CommonProperties.getValue(config.getProperties(), config.getRuntimeType(),
CommonProperties.MOXY_JSON_FEATURE_DISABLE, Boolean.FALSE, Boolean.class)) {
return false;
}
final String jsonFeature = CommonProperties.getValue(config.getProperties(), config.getRuntimeType(),
InternalProperties.JSON_FEATURE, JSON_FEATURE, String.class);
if (!JSON_FEATURE.equalsIgnoreCase(jsonFeature)) {
return false;
}
context.property(PropertiesHelper.getPropertyNameForRuntime(InternalProperties.JSON_FEATURE, config.getRuntimeType()),
JSON_FEATURE);
final int workerPriority = Priorities.USER + 2000;
if (EntityFilteringFeature.enabled(config)) {
context.register(MoxyFilteringFeature.class);
context.register(FilteringMoxyJsonProvider.class, workerPriority);
} else {
context.register(ConfigurableMoxyJsonProvider.class, workerPriority);
}
return true;
}
}