package ameba.mvc.route;
import org.apache.commons.lang3.StringUtils;
import org.glassfish.jersey.server.model.ModelProcessor;
import org.glassfish.jersey.server.model.Resource;
import org.glassfish.jersey.server.model.ResourceModel;
import javax.inject.Singleton;
import javax.ws.rs.ConstrainedTo;
import javax.ws.rs.RuntimeType;
import javax.ws.rs.core.Configuration;
import javax.ws.rs.core.Feature;
import javax.ws.rs.core.FeatureContext;
/**
* <p>RouteFeature class.</p>
*
* @author icode
* @since 2013-08-07
*
*/
@Singleton
@ConstrainedTo(RuntimeType.SERVER)
public class RouteFeature implements Feature {
/**
* {@inheritDoc}
*/
@Override
public boolean configure(final FeatureContext context) {
final String routePath = (String) context.getConfiguration().getProperty("resource.helper.route.path");
if (StringUtils.isNotBlank(routePath)) {
context.register(new ModelProcessor() {
@Override
public ResourceModel processResourceModel(ResourceModel resourceModel, Configuration configuration) {
ResourceModel.Builder resourceModelBuilder = new ResourceModel.Builder(resourceModel, false);
Resource resource = Resource.builder(RouteHelper.class).path(routePath).build();
resourceModelBuilder.addResource(resource);
return resourceModelBuilder.build();
}
@Override
public ResourceModel processSubResource(ResourceModel subResourceModel, Configuration configuration) {
return subResourceModel;
}
});
return true;
}
return false;
}
}