Package com.google.gerrit.server
Class DynamicOptions
- java.lang.Object
-
- com.google.gerrit.server.DynamicOptions
-
public class DynamicOptions extends Object
Helper class to define and parse options from plugins on ssh and RestAPI commands.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static interface
DynamicOptions.BeanParseListener
Implement this if your DynamicBean needs an opportunity to act on the Bean directly before or after argument parsing.static interface
DynamicOptions.BeanProvider
static interface
DynamicOptions.BeanReceiver
The entity which provided additional options may need a way to receive a reference to the DynamicBean it provided.static interface
DynamicOptions.ClassNameProvider
To provide additional options to a command in another classloader, bind a ClassNameProvider which provides the name of your DynamicBean in the other classLoader.static interface
DynamicOptions.DynamicBean
To provide additional options, bind a DynamicBean.static interface
DynamicOptions.ModulesClassNamesProvider
To provide additional Guice bindings for options to a command in another classloader, bind a ModulesClassNamesProvider which provides the name of your Modules needed for your DynamicBean in the other classLoader.
-
Field Summary
Fields Modifier and Type Field Description protected Object
bean
protected Map<String,DynamicOptions.DynamicBean>
beansByPlugin
protected com.google.inject.Injector
injector
protected static Map<ClassLoader,Map<ClassLoader,WeakReference<ClassLoader>>>
mergedClByCls
MergedClassloaders allow us to load classes from both plugin classloaders.
-
Constructor Summary
Constructors Constructor Description DynamicOptions(Object bean, com.google.inject.Injector injector, DynamicMap<DynamicOptions.DynamicBean> dynamicBeans)
Internal: For Gerrit to include options from DynamicBeans, setup a DynamicMap and instantiate this class so the following methods can be called if desired:
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description DynamicOptions.DynamicBean
getDynamicBean(Object bean, DynamicOptions.DynamicBean dynamicBean)
protected ClassLoader
getMergedClassLoader(ClassLoader beanCl, ClassLoader dynamicBeanCl)
void
onBeanParseEnd()
void
onBeanParseStart()
void
parseDynamicBeans(com.google.gerrit.util.cli.CmdLineParser clp)
void
setDynamicBeans()
-
-
-
Field Detail
-
mergedClByCls
protected static Map<ClassLoader,Map<ClassLoader,WeakReference<ClassLoader>>> mergedClByCls
MergedClassloaders allow us to load classes from both plugin classloaders. Store the merged classloaders in a Map to avoid creating a new classloader for each invocation. Use a WeakHashMap to avoid leaking these MergedClassLoaders once either plugin is unloaded. Since the WeakHashMap only takes care of ensuring the Keys can get garbage collected, use WeakReferences to store the MergedClassloaders in the WeakHashMap.Outter keys are the bean plugin's classloaders (the plugin being extended)
Inner keys are the dynamicBeans plugin's classloaders (the extending plugin)
The value is the MergedClassLoader representing the merging of the outter and inner key classloaders.
-
bean
protected Object bean
-
beansByPlugin
protected Map<String,DynamicOptions.DynamicBean> beansByPlugin
-
injector
protected com.google.inject.Injector injector
-
-
Constructor Detail
-
DynamicOptions
public DynamicOptions(Object bean, com.google.inject.Injector injector, DynamicMap<DynamicOptions.DynamicBean> dynamicBeans)
Internal: For Gerrit to include options from DynamicBeans, setup a DynamicMap and instantiate this class so the following methods can be called if desired:DynamicOptions pluginOptions = new DynamicOptions(bean, injector, dynamicBeans); pluginOptions.parseDynamicBeans(clp); pluginOptions.setDynamicBeans(); pluginOptions.onBeanParseStart(); // parse arguments here: clp.parseArgument(argv); pluginOptions.onBeanParseEnd();
-
-
Method Detail
-
getDynamicBean
public DynamicOptions.DynamicBean getDynamicBean(Object bean, DynamicOptions.DynamicBean dynamicBean)
-
getMergedClassLoader
protected ClassLoader getMergedClassLoader(ClassLoader beanCl, ClassLoader dynamicBeanCl)
-
parseDynamicBeans
public void parseDynamicBeans(com.google.gerrit.util.cli.CmdLineParser clp)
-
setDynamicBeans
public void setDynamicBeans()
-
onBeanParseStart
public void onBeanParseStart()
-
onBeanParseEnd
public void onBeanParseEnd()
-
-