Skip to content

Commit

Permalink
Fix REST API browser after changes to the PluginRestResource injection (
Browse files Browse the repository at this point in the history
#2550)

Create a wrapper class for the map of PluginRestResource classes to make
it injectable into Jersey resources.

Fallout from #2492.
  • Loading branch information
bernd authored and joschi committed Jul 28, 2016
1 parent 74690d1 commit 6f4733a
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 4 deletions.
@@ -0,0 +1,47 @@
/**
* This file is part of Graylog.
*
* Graylog is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Graylog is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Graylog. If not, see <http://www.gnu.org/licenses/>.
*/
package org.graylog2.shared.plugins;

import org.graylog2.plugin.rest.PluginRestResource;

import javax.inject.Inject;
import java.util.Map;
import java.util.Set;

/**
* This class provides the map of {@link PluginRestResource} classes that are available through the Guice mapbinder.
*
* We need this wrapper class to be able to inject the {@literal Set<Class<? extends PluginRestResource>>} into
* a Jersey REST resource. HK2 does not allow to inject this directly into the resource class.
*/
public class PluginRestResourceClasses {
private final Map<String, Set<Class<? extends PluginRestResource>>> pluginRestResources;

@Inject
public PluginRestResourceClasses(final Map<String, Set<Class<? extends PluginRestResource>>> pluginRestResources) {
this.pluginRestResources = pluginRestResources;
}

/**
* Returns a map of plugin packge names to Sets of {@link PluginRestResource} classes.
*
* @return the map
*/
public Map<String, Set<Class<? extends PluginRestResource>>> getMap() {
return pluginRestResources;
}
}
Expand Up @@ -23,6 +23,7 @@
import org.graylog2.plugin.BaseConfiguration; import org.graylog2.plugin.BaseConfiguration;
import org.graylog2.plugin.rest.PluginRestResource; import org.graylog2.plugin.rest.PluginRestResource;
import org.graylog2.rest.RestTools; import org.graylog2.rest.RestTools;
import org.graylog2.shared.plugins.PluginRestResourceClasses;
import org.graylog2.shared.rest.documentation.generator.Generator; import org.graylog2.shared.rest.documentation.generator.Generator;
import org.graylog2.shared.rest.resources.RestResource; import org.graylog2.shared.rest.resources.RestResource;


Expand Down Expand Up @@ -55,19 +56,19 @@ public class DocumentationResource extends RestResource {
@Inject @Inject
public DocumentationResource(BaseConfiguration configuration, public DocumentationResource(BaseConfiguration configuration,
@Named("RestControllerPackages") String[] restControllerPackages, @Named("RestControllerPackages") String[] restControllerPackages,
Map<String, Set<PluginRestResource>> pluginRestResources) { PluginRestResourceClasses pluginRestResourceClasses) {


this.configuration = configuration; this.configuration = configuration;


this.restControllerPackages.addAll(Arrays.asList(restControllerPackages)); this.restControllerPackages.addAll(Arrays.asList(restControllerPackages));


// All plugin resources get the plugin prefix + the plugin package. // All plugin resources get the plugin prefix + the plugin package.
for (Map.Entry<String, Set<PluginRestResource>> entry : pluginRestResources.entrySet()) { for (Map.Entry<String, Set<Class<? extends PluginRestResource>>> entry : pluginRestResourceClasses.getMap().entrySet()) {
final String pluginPackage = entry.getKey(); final String pluginPackage = entry.getKey();
this.restControllerPackages.add(pluginPackage); this.restControllerPackages.add(pluginPackage);


for (PluginRestResource pluginRestResource : entry.getValue()) { for (Class<? extends PluginRestResource> pluginRestResource : entry.getValue()) {
this.pluginRestControllerMapping.put(pluginRestResource.getClass(), pluginPackage); this.pluginRestControllerMapping.put(pluginRestResource, pluginPackage);
} }
} }
} }
Expand Down

0 comments on commit 6f4733a

Please sign in to comment.