package org.molgenis.ui;
import org.molgenis.data.DataService;
import org.molgenis.data.Entity;
import org.molgenis.data.settings.DefaultSettingsEntityType;
import org.molgenis.framework.ui.MolgenisPlugin;
import org.molgenis.framework.ui.MolgenisPluginFactory;
import org.molgenis.framework.ui.MolgenisPluginRegistry;
import org.molgenis.security.core.runas.RunAsSystemProxy;
import org.springframework.beans.factory.annotation.Autowired;
import javax.annotation.PostConstruct;
/**
* Abstract base class for all MOLGENIS plugin controllers
*/
public abstract class MolgenisPluginController
{
public static final String PLUGIN_URI_PREFIX = "/plugin/";
@Autowired
private DataService dataService;
@Autowired
private MolgenisPluginRegistry molgenisPluginRegistry;
/**
* Base URI for a plugin
*/
private final String uri;
private final MolgenisPluginFactory molgenisPluginFactory;
public MolgenisPluginController(String uri)
{
this(uri, null);
}
public MolgenisPluginController(String uri, MolgenisPluginFactory molgenisPluginFactory)
{
if (uri == null) throw new IllegalArgumentException("uri is null");
if (!uri.startsWith(PLUGIN_URI_PREFIX))
{
throw new IllegalArgumentException("uri does not start with " + PLUGIN_URI_PREFIX);
}
this.uri = uri;
this.molgenisPluginFactory = molgenisPluginFactory;
}
/**
* Returns the base URI of the plugin
*
* @return
*/
public String getUri()
{
return uri;
}
/**
* Returns the unique id of the plugin
*/
public String getId()
{
return uri.substring(PLUGIN_URI_PREFIX.length());
}
/**
* Returns an entity containing settings for a plugin or null if no settings exist.
*
* @return entity or null
*/
public Entity getPluginSettings()
{
String entityName = DefaultSettingsEntityType.getSettingsEntityName(getId());
return RunAsSystemProxy.runAsSystem(() -> getPluginSettings(entityName));
}
private Entity getPluginSettings(String entityName)
{
return dataService.hasRepository(entityName) ? dataService.findOneById(entityName, getId()) : null;
}
@PostConstruct
private void registerPlugin()
{
molgenisPluginRegistry.registerPlugin(new MolgenisPlugin(getId(), getId(), "", "")); // FIXME
if (molgenisPluginFactory != null)
{
molgenisPluginRegistry.registerPluginFactory(molgenisPluginFactory);
}
}
/**
* Testability
*
* @param dataService
*/
void setDataService(DataService dataService)
{
this.dataService = dataService;
}
}