Package com.google.gerrit.server
Class DynamicOptions
java.lang.Object
com.google.gerrit.server.DynamicOptions
- All Implemented Interfaces:
AutoCloseable
Helper class to define and parse options from plugins on ssh and RestAPI commands.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic interfaceImplement this if your DynamicBean needs an opportunity to act on the Bean directly before or after argument parsing.static interfacestatic interfaceThe entity which provided additional options may need a way to receive a reference to the DynamicBean it provided.static interfaceTo provide additional options to a command in another classloader, bind a ClassNameProvider which provides the name of your DynamicBean in the other classLoader.static interfaceTo provide additional options, bind a DynamicBean.static interfaceTo 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
FieldsModifier and TypeFieldDescriptionprotected Objectprotected Map<String, DynamicOptions.DynamicBean> protected DynamicMap<DynamicOptions.DynamicBean> protected com.google.inject.Injectorprotected com.google.gerrit.lifecycle.LifecycleManagerprotected static Map<ClassLoader, Map<ClassLoader, WeakReference<ClassLoader>>> MergedClassloaders allow us to load classes from both plugin classloaders. -
Constructor Summary
ConstructorsConstructorDescriptionDynamicOptions(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
Modifier and TypeMethodDescriptionvoidclose()getDynamicBean(Object bean, DynamicOptions.DynamicBean dynamicBean) protected ClassLoadergetMergedClassLoader(ClassLoader beanCl, ClassLoader dynamicBeanCl) voidvoidvoidparseDynamicBeans(com.google.gerrit.util.cli.CmdLineParser clp) voidvoidvoidvoid
-
Field Details
-
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
-
beansByPlugin
-
injector
protected com.google.inject.Injector injector -
dynamicBeans
-
lifecycleManager
protected com.google.gerrit.lifecycle.LifecycleManager lifecycleManager
-
-
Constructor Details
-
DynamicOptions
public DynamicOptions(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(injector, dynamicBeans); pluginOptions.setBean(bean); pluginOptions.startLifecycleListeners(); pluginOptions.parseDynamicBeans(clp); pluginOptions.setDynamicBeans(); pluginOptions.onBeanParseStart(); // parse arguments here: clp.parseArgument(argv); pluginOptions.onBeanParseEnd();
-
-
Method Details
-
setBean
-
getDynamicBean
public DynamicOptions.DynamicBean getDynamicBean(Object bean, DynamicOptions.DynamicBean dynamicBean) -
getMergedClassLoader
-
parseDynamicBeans
public void parseDynamicBeans(com.google.gerrit.util.cli.CmdLineParser clp) -
setDynamicBeans
public void setDynamicBeans() -
startLifecycleListeners
public void startLifecycleListeners() -
stopLifecycleListeners
public void stopLifecycleListeners() -
onBeanParseStart
public void onBeanParseStart() -
onBeanParseEnd
public void onBeanParseEnd() -
close
public void close()- Specified by:
closein interfaceAutoCloseable
-