package ameba.core;
import org.glassfish.jersey.server.ResourceConfig;
import java.util.Map;
import java.util.Set;
/**
* @author icode
*/
class ExcludeResourceConfig extends ResourceConfig {
private Set<String> excludes;
/**
* <p>Constructor for ExcludeResourceConfig.</p>
*
* @param excludes a {@link java.util.Set} object.
*/
public ExcludeResourceConfig(Set<String> excludes) {
this.excludes = excludes;
}
private boolean isExclude(Class cls) {
if (excludes == null) return false;
if (cls == null) return true;
String className = cls.getName();
for (String e : excludes) {
if (e.endsWith(".**")) {
if (className.startsWith(e.substring(0, e.length() - 3))) {
return true;
}
} else if (e.endsWith(".*")) {
int index = e.length() - 2;
if (className.startsWith(e.substring(0, index)) && className.indexOf(".", index + 1) == -1) {
return true;
}
} else if (className.equals(e)) {
return true;
}
}
return false;
}
/**
* {@inheritDoc}
*/
@Override
public ResourceConfig register(Object component, Map<Class<?>, Integer> contracts) {
if (component == null || isExclude(component.getClass())) return this;
return super.register(component, contracts);
}
/** {@inheritDoc} */
@Override
public ResourceConfig register(Class<?> componentClass) {
if (componentClass == null || isExclude(componentClass)) return this;
return super.register(componentClass);
}
/** {@inheritDoc} */
@Override
public ResourceConfig register(Class<?> componentClass, int bindingPriority) {
if (componentClass == null || isExclude(componentClass)) return this;
return super.register(componentClass, bindingPriority);
}
/** {@inheritDoc} */
@Override
public ResourceConfig register(Class<?> componentClass, Class<?>... contracts) {
if (componentClass == null || isExclude(componentClass)) return this;
return super.register(componentClass, contracts);
}
/** {@inheritDoc} */
@Override
public ResourceConfig register(Class<?> componentClass, Map<Class<?>, Integer> contracts) {
if (componentClass == null || isExclude(componentClass)) return this;
return super.register(componentClass, contracts);
}
/** {@inheritDoc} */
@Override
public ResourceConfig register(Object component) {
if (component == null || isExclude(component.getClass())) return this;
return super.register(component);
}
/** {@inheritDoc} */
@Override
public ResourceConfig register(Object component, int bindingPriority) {
if (component == null || isExclude(component.getClass())) return this;
return super.register(component, bindingPriority);
}
/** {@inheritDoc} */
@Override
public ResourceConfig register(Object component, Class<?>... contracts) {
if (component == null || isExclude(component.getClass())) return this;
return super.register(component, contracts);
}
}