package alien4cloud.rest.plugin;
import java.util.Map;
import javax.annotation.Resource;
import io.swagger.annotations.Api;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import alien4cloud.plugin.Plugin;
import alien4cloud.plugin.PluginManager;
import alien4cloud.plugin.model.ManagedPlugin;
import alien4cloud.webconfiguration.StaticResourcesConfiguration;
import com.google.common.collect.Maps;
import io.swagger.annotations.ApiOperation;
import springfox.documentation.annotations.ApiIgnore;
/**
* UI Controller provide services used to manage the UI view including Angular Route management, User custom dashboards etc.
*/
@ApiIgnore
@RestController
@RequestMapping({"/rest/modules", "/rest/v1/modules", "/rest/latest/modules"})
@Api(value = "", description = "Operations on UI modules")
public class UiController {
@Resource
private PluginManager pluginManager;
private final String root = StaticResourcesConfiguration.PLUGIN_STATIC_ENDPOINT.substring(1);
/**
* Get the list of modules to be loaded.
*
* @return The list of modules to be loaded.
*/
@ApiOperation(value = "Get the list of ui modules to be loaded.")
@RequestMapping(value = "", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public Map<String, PluginInfo> modules() {
Map<String, ManagedPlugin> plugins = pluginManager.getPluginContexts();
Map<String, PluginInfo> entryPoints = Maps.newHashMap();
for (ManagedPlugin managedPlugin : plugins.values()) {
Plugin plugin = managedPlugin.getPlugin();
String uiEntryPoint = plugin.getDescriptor().getUiEntryPoint();
if (uiEntryPoint != null) {
String pluginBase = root + plugin.getPluginPathId() + "/";
String entryPoint = pluginBase + uiEntryPoint;
entryPoints.put(managedPlugin.getPlugin().getDescriptor().getId(), new PluginInfo(entryPoint, pluginBase));
}
}
return entryPoints;
}
@Getter
@Setter
@AllArgsConstructor(suppressConstructorProperties = true)
public class PluginInfo {
private String entryPoint;
private String base;
}
}