package org.buddycloud.channelserver.channel;
import java.io.File;
import net.xeoh.plugins.base.PluginManager;
import net.xeoh.plugins.base.impl.PluginManagerFactory;
import net.xeoh.plugins.base.options.getplugin.OptionCapabilities;
import org.buddycloud.channelserver.channel.node.configuration.field.ContentType;
import org.buddycloud.channelserver.channel.validate.AtomEntry;
import org.buddycloud.channelserver.channel.validate.PayloadValidator;
import org.buddycloud.channelserver.channel.validate.UnknownContentTypeException;
import org.buddycloud.channelserver.db.exception.NodeStoreException;
public class ValidatePayload {
public static final String UNSUPPORTED_CONTENT_TYPE = "unsupported-content-type";
private ChannelManager channelManager;
private String node;
private PluginManager pluginManager;
public ValidatePayload(ChannelManager channelManager, String node) {
this.channelManager = channelManager;
this.node = node;
}
public PayloadValidator getValidator() throws NodeStoreException, UnknownContentTypeException {
String contentType = channelManager.getNodeConfValue(node, ContentType.FIELD_NAME);
AtomEntry defaultValidator = new AtomEntry();
if ((null == contentType) || (defaultValidator.canValidate(contentType))) {
return defaultValidator;
}
PayloadValidator validator = getValidatorFromPlugins(contentType);
if (null == validator) {
throw new UnknownContentTypeException("Unknown node content type " + contentType);
}
return validator;
}
private PayloadValidator getValidatorFromPlugins(String contentType) {
return getPluginManager().getPlugin(PayloadValidator.class, new OptionCapabilities(contentType));
}
public void setPluginManager(PluginManager pluginManager) {
this.pluginManager = pluginManager;
}
private PluginManager getPluginManager() {
if (null == pluginManager) {
setDefaultPluginManager();
}
return pluginManager;
}
private void setDefaultPluginManager() {
PluginManager pluginManager = PluginManagerFactory.createPluginManager();
pluginManager.addPluginsFrom(new File("plugins/").toURI());
setPluginManager(pluginManager);
}
}