1 /*
2  * Copyright (C) 2010 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.tradefed.config;
18 
19 import com.android.tradefed.build.BuildRetrievalError;
20 import com.android.tradefed.build.IBuildProvider;
21 import com.android.tradefed.command.ICommandOptions;
22 import com.android.tradefed.config.filter.GlobalTestFilter;
23 import com.android.tradefed.device.IDeviceRecovery;
24 import com.android.tradefed.device.IDeviceSelection;
25 import com.android.tradefed.device.TestDeviceOptions;
26 import com.android.tradefed.device.metric.IMetricCollector;
27 import com.android.tradefed.log.ILeveledLogOutput;
28 import com.android.tradefed.postprocessor.IPostProcessor;
29 import com.android.tradefed.result.ILogSaver;
30 import com.android.tradefed.result.ITestInvocationListener;
31 import com.android.tradefed.result.skipped.SkipManager;
32 import com.android.tradefed.retry.IRetryDecision;
33 import com.android.tradefed.suite.checker.ISystemStatusChecker;
34 import com.android.tradefed.targetprep.ITargetPreparer;
35 import com.android.tradefed.targetprep.multi.IMultiTargetPreparer;
36 import com.android.tradefed.testtype.IRemoteTest;
37 import com.android.tradefed.testtype.coverage.CoverageOptions;
38 import com.android.tradefed.util.keystore.IKeyStoreClient;
39 
40 import java.io.File;
41 import java.io.IOException;
42 import java.io.PrintStream;
43 import java.io.PrintWriter;
44 import java.util.Collection;
45 import java.util.List;
46 import java.util.Set;
47 
48 /**
49  * Configuration information for a TradeFederation invocation.
50  *
51  * Each TradeFederation invocation has a single {@link IConfiguration}. An {@link IConfiguration}
52  * stores all the delegate objects that should be used during the invocation, and their associated
53  * {@link Option}'s
54  */
55 public interface IConfiguration {
56 
57     /** Returns the name of the configuration. */
getName()58     public String getName();
59 
60     /**
61      * Gets the {@link IBuildProvider} from the configuration.
62      *
63      * @return the {@link IBuildProvider} provided in the configuration
64      */
getBuildProvider()65     public IBuildProvider getBuildProvider();
66 
67     /**
68      * Gets the {@link ITargetPreparer}s from the configuration.
69      *
70      * @return the {@link ITargetPreparer}s provided in order in the configuration
71      */
getTargetPreparers()72     public List<ITargetPreparer> getTargetPreparers();
73 
74     /**
75      * Gets the {@link ITargetPreparer}s from the configuration.
76      *
77      * @return the {@link ITargetPreparer}s provided in order in the configuration
78      */
getLabPreparers()79     public List<ITargetPreparer> getLabPreparers();
80 
81     /**
82      * Gets the {@link IRemoteTest}s to run from the configuration.
83      *
84      * @return the tests provided in the configuration
85      */
getTests()86     public List<IRemoteTest> getTests();
87 
88     /**
89      * Gets the {@link ITestInvocationListener}s to use from the configuration.
90      *
91      * @return the {@link ITestInvocationListener}s provided in the configuration.
92      */
getTestInvocationListeners()93     public List<ITestInvocationListener> getTestInvocationListeners();
94 
95     /**
96      * Gets the {@link IDeviceRecovery} to use from the configuration.
97      *
98      * @return the {@link IDeviceRecovery} provided in the configuration.
99      */
getDeviceRecovery()100     public IDeviceRecovery getDeviceRecovery();
101 
102     /**
103      * Gets the {@link TestDeviceOptions} to use from the configuration.
104      *
105      * @return the {@link TestDeviceOptions} provided in the configuration.
106      */
getDeviceOptions()107     public TestDeviceOptions getDeviceOptions();
108 
109     /**
110      * Gets the {@link ILeveledLogOutput} to use from the configuration.
111      *
112      * @return the {@link ILeveledLogOutput} provided in the configuration.
113      */
getLogOutput()114     public ILeveledLogOutput getLogOutput();
115 
116     /**
117      * Gets the {@link ILogSaver} to use from the configuration.
118      *
119      * @return the {@link ILogSaver} provided in the configuration.
120      */
getLogSaver()121     public ILogSaver getLogSaver();
122 
123     /** Returns the {@link IRetryDecision} used for the invocation. */
getRetryDecision()124     public IRetryDecision getRetryDecision();
125 
126     /**
127      * Gets the {@link IMultiTargetPreparer}s from the configuration.
128      *
129      * @return the {@link IMultiTargetPreparer}s provided in order in the configuration
130      */
getMultiTargetPreparers()131     public List<IMultiTargetPreparer> getMultiTargetPreparers();
132 
133     /**
134      * Gets the {@link IMultiTargetPreparer}s from the configuration that should be executed before
135      * any of the devices target_preparers.
136      *
137      * @return the {@link IMultiTargetPreparer}s provided in order in the configuration
138      */
getMultiPreTargetPreparers()139     public List<IMultiTargetPreparer> getMultiPreTargetPreparers();
140 
141     /**
142      * Gets the {@link ISystemStatusChecker}s from the configuration.
143      *
144      * @return the {@link ISystemStatusChecker}s provided in order in the configuration
145      */
getSystemStatusCheckers()146     public List<ISystemStatusChecker> getSystemStatusCheckers();
147 
148     /** Gets the {@link IMetricCollector}s from the configuration. */
getMetricCollectors()149     public List<IMetricCollector> getMetricCollectors();
150 
151     /** Gets the {@link IPostProcessor}s from the configuration. */
getPostProcessors()152     public List<IPostProcessor> getPostProcessors();
153 
154     /**
155      * Gets the {@link ICommandOptions} to use from the configuration.
156      *
157      * @return the {@link ICommandOptions} provided in the configuration.
158      */
getCommandOptions()159     public ICommandOptions getCommandOptions();
160 
161     /** Returns the {@link ConfigurationDescriptor} provided in the configuration. */
getConfigurationDescription()162     public ConfigurationDescriptor getConfigurationDescription();
163 
164     /**
165      * Gets the {@link IDeviceSelection} to use from the configuration.
166      *
167      * @return the {@link IDeviceSelection} provided in the configuration.
168      */
getDeviceRequirements()169     public IDeviceSelection getDeviceRequirements();
170 
171     /**
172      * Gets the {@link CoverageOptions} to use from the configuration.
173      *
174      * @return the {@link CoverageOptions} provided in the configuration.
175      */
getCoverageOptions()176     public CoverageOptions getCoverageOptions();
177 
178     /** Gets the {@link GlobalTestFilter} for the invocation. */
getGlobalFilters()179     public GlobalTestFilter getGlobalFilters();
180 
181     /** Gets the {@link SkipManager} for the invocation. */
getSkipManager()182     public SkipManager getSkipManager();
183 
184     /**
185      * Generic interface to get the configuration object with the given type name.
186      *
187      * @param typeName the unique type of the configuration object
188      *
189      * @return the configuration object or <code>null</code> if the object type with given name
190      * does not exist.
191      */
getConfigurationObject(String typeName)192     public Object getConfigurationObject(String typeName);
193 
194     /**
195      * Generic interface to get all the object of one given type name across devices.
196      *
197      * @param typeName the unique type of the configuration object
198      * @return The list of configuration objects of the given type.
199      */
getAllConfigurationObjectsOfType(String typeName)200     public Collection<Object> getAllConfigurationObjectsOfType(String typeName);
201 
202     /**
203      * Similar to {@link #getConfigurationObject(String)}, but for configuration
204      * object types that support multiple objects.
205      *
206      * @param typeName the unique type name of the configuration object
207      *
208      * @return the list of configuration objects or <code>null</code> if the object type with
209      * given name does not exist.
210      */
getConfigurationObjectList(String typeName)211     public List<?> getConfigurationObjectList(String typeName);
212 
213     /**
214      * Gets the {@link IDeviceConfiguration}s from the configuration.
215      *
216      * @return the {@link IDeviceConfiguration}s provided in order in the configuration
217      */
getDeviceConfig()218     public List<IDeviceConfiguration> getDeviceConfig();
219 
220     /**
221      * Return the {@link IDeviceConfiguration} associated to the name provided, null if not found.
222      */
getDeviceConfigByName(String nameDevice)223     public IDeviceConfiguration getDeviceConfigByName(String nameDevice);
224 
225     /**
226      * Inject a option value into the set of configuration objects.
227      * <p/>
228      * Useful to provide values for options that are generated dynamically.
229      *
230      * @param optionName the option name
231      * @param optionValue the option value
232      * @throws ConfigurationException if failed to set the option's value
233      */
injectOptionValue(String optionName, String optionValue)234     public void injectOptionValue(String optionName, String optionValue)
235             throws ConfigurationException;
236 
237     /**
238      * Inject a option value into the set of configuration objects.
239      * <p/>
240      * Useful to provide values for options that are generated dynamically.
241      *
242      * @param optionName the option name
243      * @param optionKey the optional key for map options, or null
244      * @param optionValue the map option value
245      * @throws ConfigurationException if failed to set the option's value
246      */
injectOptionValue(String optionName, String optionKey, String optionValue)247     public void injectOptionValue(String optionName, String optionKey, String optionValue)
248             throws ConfigurationException;
249 
250     /**
251      * Inject a option value into the set of configuration objects.
252      * <p/>
253      * Useful to provide values for options that are generated dynamically.
254      *
255      * @param optionName the option name
256      * @param optionKey the optional key for map options, or null
257      * @param optionValue the map option value
258      * @param optionSource the source config that provided this option value
259      * @throws ConfigurationException if failed to set the option's value
260      */
injectOptionValueWithSource(String optionName, String optionKey, String optionValue, String optionSource)261     public void injectOptionValueWithSource(String optionName, String optionKey, String optionValue,
262             String optionSource) throws ConfigurationException;
263 
264     /**
265      * Inject multiple option values into the set of configuration objects.
266      * <p/>
267      * Useful to inject many option values at once after creating a new object.
268      *
269      * @param optionDefs a list of option defs to inject
270      * @throws ConfigurationException if failed to set option values
271      */
injectOptionValues(List<OptionDef> optionDefs)272     public void injectOptionValues(List<OptionDef> optionDefs) throws ConfigurationException;
273 
274     /**
275      * Inject multiple option values into the set of configuration objects without throwing if one
276      * of the option cannot be applied.
277      *
278      * <p>Useful to inject many option values at once after creating a new object.
279      *
280      * @param optionDefs a list of option defs to inject
281      * @throws ConfigurationException if failed to create the {@link OptionSetter}
282      */
safeInjectOptionValues(List<OptionDef> optionDefs)283     public void safeInjectOptionValues(List<OptionDef> optionDefs) throws ConfigurationException;
284 
285     /**
286      * Create a shallow copy of this object.
287      *
288      * @return a {link IConfiguration} copy
289      */
clone()290     public IConfiguration clone();
291 
292     /**
293      * Create a base clone from {@link #clone()} then deep clone the list of given config object.
294      *
295      * @param objectToDeepClone The list of configuration object to deep clone.
296      * @param client The keystore client.
297      * @return The partially deep cloned config.
298      * @throws ConfigurationException
299      */
partialDeepClone(List<String> objectToDeepClone, IKeyStoreClient client)300     public IConfiguration partialDeepClone(List<String> objectToDeepClone, IKeyStoreClient client)
301             throws ConfigurationException;
302 
303     /**
304      * Replace the current {@link IBuildProvider} in the configuration.
305      *
306      * @param provider the new {@link IBuildProvider}
307      */
setBuildProvider(IBuildProvider provider)308     public void setBuildProvider(IBuildProvider provider);
309 
310     /**
311      * Set the {@link ILeveledLogOutput}, replacing any existing value.
312      *
313      * @param logger
314      */
setLogOutput(ILeveledLogOutput logger)315     public void setLogOutput(ILeveledLogOutput logger);
316 
317     /**
318      * Set the {@link IRetryDecision}, replacing any existing value.
319      *
320      * @param decisionRetry
321      */
setRetryDecision(IRetryDecision decisionRetry)322     public void setRetryDecision(IRetryDecision decisionRetry);
323 
324     /**
325      * Set the {@link ILogSaver}, replacing any existing value.
326      *
327      * @param logSaver
328      */
setLogSaver(ILogSaver logSaver)329     public void setLogSaver(ILogSaver logSaver);
330 
331     /**
332      * Set the {@link IDeviceRecovery}, replacing any existing value.
333      *
334      * @param recovery
335      */
setDeviceRecovery(IDeviceRecovery recovery)336     public void setDeviceRecovery(IDeviceRecovery recovery);
337 
338     /**
339      * Set the {@link ITargetPreparer}, replacing any existing value.
340      *
341      * @param preparer
342      */
setTargetPreparer(ITargetPreparer preparer)343     public void setTargetPreparer(ITargetPreparer preparer);
344 
345     /**
346      * Set the list of {@link ITargetPreparer}s, replacing any existing value.
347      *
348      * @param preparers
349      */
setTargetPreparers(List<ITargetPreparer> preparers)350     public void setTargetPreparers(List<ITargetPreparer> preparers);
351 
352     /**
353      * Set the {@link ITargetPreparer}, replacing any existing value.
354      *
355      * @param preparer
356      */
setLabPreparer(ITargetPreparer preparer)357     public void setLabPreparer(ITargetPreparer preparer);
358 
359     /**
360      * Set the list of {@link ITargetPreparer}s, replacing any existing value.
361      *
362      * @param preparers
363      */
setLabPreparers(List<ITargetPreparer> preparers)364     public void setLabPreparers(List<ITargetPreparer> preparers);
365 
366     /**
367      * Set a {@link IDeviceConfiguration}, replacing any existing value.
368      *
369      * @param deviceConfig
370      */
setDeviceConfig(IDeviceConfiguration deviceConfig)371     public void setDeviceConfig(IDeviceConfiguration deviceConfig);
372 
373     /**
374      * Set the {@link IDeviceConfiguration}s, replacing any existing value.
375      *
376      * @param deviceConfigs
377      */
setDeviceConfigList(List<IDeviceConfiguration> deviceConfigs)378     public void setDeviceConfigList(List<IDeviceConfiguration> deviceConfigs);
379 
380     /**
381      * Convenience method to set a single {@link IRemoteTest} in this configuration, replacing any
382      * existing values
383      *
384      * @param test
385      */
setTest(IRemoteTest test)386     public void setTest(IRemoteTest test);
387 
388     /**
389      * Set the list of {@link IRemoteTest}s in this configuration, replacing any
390      * existing values
391      *
392      * @param tests
393      */
setTests(List<IRemoteTest> tests)394     public void setTests(List<IRemoteTest> tests);
395 
396     /**
397      * Set the list of {@link IMultiTargetPreparer}s in this configuration, replacing any
398      * existing values
399      *
400      * @param multiTargPreps
401      */
setMultiTargetPreparers(List<IMultiTargetPreparer> multiTargPreps)402     public void setMultiTargetPreparers(List<IMultiTargetPreparer> multiTargPreps);
403 
404     /**
405      * Convenience method to set a single {@link IMultiTargetPreparer} in this configuration,
406      * replacing any existing values
407      *
408      * @param multiTargPrep
409      */
setMultiTargetPreparer(IMultiTargetPreparer multiTargPrep)410     public void setMultiTargetPreparer(IMultiTargetPreparer multiTargPrep);
411 
412     /**
413      * Set the list of {@link IMultiTargetPreparer}s in this configuration that should be executed
414      * before any of the devices target_preparers, replacing any existing values
415      *
416      * @param multiPreTargPreps
417      */
setMultiPreTargetPreparers(List<IMultiTargetPreparer> multiPreTargPreps)418     public void setMultiPreTargetPreparers(List<IMultiTargetPreparer> multiPreTargPreps);
419 
420     /**
421      * Convenience method to set a single {@link IMultiTargetPreparer} in this configuration that
422      * should be executed before any of the devices target_preparers, replacing any existing values
423      *
424      * @param multiPreTargPreps
425      */
setMultiPreTargetPreparer(IMultiTargetPreparer multiPreTargPreps)426     public void setMultiPreTargetPreparer(IMultiTargetPreparer multiPreTargPreps);
427 
428     /**
429      * Set the list of {@link ISystemStatusChecker}s in this configuration, replacing any
430      * existing values
431      *
432      * @param systemCheckers
433      */
setSystemStatusCheckers(List<ISystemStatusChecker> systemCheckers)434     public void setSystemStatusCheckers(List<ISystemStatusChecker> systemCheckers);
435 
436     /**
437      * Convenience method to set a single {@link ISystemStatusChecker} in this configuration,
438      * replacing any existing values
439      *
440      * @param systemChecker
441      */
setSystemStatusChecker(ISystemStatusChecker systemChecker)442     public void setSystemStatusChecker(ISystemStatusChecker systemChecker);
443 
444     /**
445      * Set the list of {@link ITestInvocationListener}s, replacing any existing values
446      *
447      * @param listeners
448      */
setTestInvocationListeners(List<ITestInvocationListener> listeners)449     public void setTestInvocationListeners(List<ITestInvocationListener> listeners);
450 
451     /**
452      * Convenience method to set a single {@link ITestInvocationListener}
453      *
454      * @param listener
455      */
setTestInvocationListener(ITestInvocationListener listener)456     public void setTestInvocationListener(ITestInvocationListener listener);
457 
458     /** Set the list of {@link IMetricCollector}s, replacing any existing values. */
setDeviceMetricCollectors(List<IMetricCollector> collectors)459     public void setDeviceMetricCollectors(List<IMetricCollector> collectors);
460 
461     /** Set the list of {@link IPostProcessor}s, replacing any existing values. */
setPostProcessors(List<IPostProcessor> processors)462     public void setPostProcessors(List<IPostProcessor> processors);
463 
464     /**
465      * Set the {@link ICommandOptions}, replacing any existing values
466      *
467      * @param cmdOptions
468      */
setCommandOptions(ICommandOptions cmdOptions)469     public void setCommandOptions(ICommandOptions cmdOptions);
470 
471     /**
472      * Set the {@link IDeviceSelection}, replacing any existing values
473      *
474      * @param deviceSelection
475      */
setDeviceRequirements(IDeviceSelection deviceSelection)476     public void setDeviceRequirements(IDeviceSelection deviceSelection);
477 
478     /**
479      * Set the {@link TestDeviceOptions}, replacing any existing values
480      */
setDeviceOptions(TestDeviceOptions deviceOptions)481     public void setDeviceOptions(TestDeviceOptions deviceOptions);
482 
483     /** Set the {@link CoverageOptions}, replacing any existing values. */
setCoverageOptions(CoverageOptions coverageOptions)484     public void setCoverageOptions(CoverageOptions coverageOptions);
485 
486     /**
487      * Generic method to set the config object with the given name, replacing any existing value.
488      *
489      * @param name the unique name of the config object type.
490      * @param configObject the config object
491      * @throws ConfigurationException if the configObject was not the correct type
492      */
setConfigurationObject(String name, Object configObject)493     public void setConfigurationObject(String name, Object configObject)
494             throws ConfigurationException;
495 
496     /**
497      * Generic method to set the config object list for the given name, replacing any existing
498      * value.
499      *
500      * @param name the unique name of the config object type.
501      * @param configList the config object list
502      * @throws ConfigurationException if any objects in the list are not the correct type
503      */
setConfigurationObjectList(String name, List<?> configList)504     public void setConfigurationObjectList(String name, List<?> configList)
505             throws ConfigurationException;
506 
507     /** Returns whether or not a configured device is tagged isFake=true or not. */
isDeviceConfiguredFake(String deviceName)508     public boolean isDeviceConfiguredFake(String deviceName);
509 
510     /**
511      * Set the config {@link Option} fields with given set of command line arguments
512      * <p/>
513      * {@link ArgsOptionParser} for expected format
514      *
515      * @param listArgs the command line arguments
516      * @return the unconsumed arguments
517      */
setOptionsFromCommandLineArgs(List<String> listArgs)518     public List<String> setOptionsFromCommandLineArgs(List<String> listArgs)
519             throws ConfigurationException;
520 
521     /**
522      * Set the config {@link Option} fields with given set of command line arguments
523      * <p/>
524      * See {@link ArgsOptionParser} for expected format
525      *
526      * @param listArgs the command line arguments
527      * @param keyStoreClient {@link IKeyStoreClient} to use.
528      * @return the unconsumed arguments
529      */
setOptionsFromCommandLineArgs(List<String> listArgs, IKeyStoreClient keyStoreClient)530     public List<String> setOptionsFromCommandLineArgs(List<String> listArgs,
531             IKeyStoreClient keyStoreClient)
532             throws ConfigurationException;
533 
534     /**
535      * Set the config {@link Option} fields with given set of command line arguments using a best
536      * effort approach.
537      *
538      * <p>See {@link ArgsOptionParser} for expected format
539      *
540      * @param listArgs the command line arguments
541      * @param keyStoreClient {@link IKeyStoreClient} to use.
542      * @return the unconsumed arguments
543      */
setBestEffortOptionsFromCommandLineArgs( List<String> listArgs, IKeyStoreClient keyStoreClient)544     public List<String> setBestEffortOptionsFromCommandLineArgs(
545             List<String> listArgs, IKeyStoreClient keyStoreClient) throws ConfigurationException;
546 
547     /**
548      * Outputs a command line usage help text for this configuration to given printStream.
549      *
550      * @param importantOnly if <code>true</code> only print help for the important options
551      * @param out the {@link PrintStream} to use.
552      * @throws ConfigurationException
553      */
printCommandUsage(boolean importantOnly, PrintStream out)554     public void printCommandUsage(boolean importantOnly, PrintStream out)
555             throws ConfigurationException;
556 
557     /**
558      * Validate option values.
559      * <p/>
560      * Currently this will just validate that all mandatory options have been set
561      *
562      * @throws ConfigurationException if config is not valid
563      */
validateOptions()564     public void validateOptions() throws ConfigurationException;
565 
566     /**
567      * Resolve options of {@link File} pointing to a remote location. This requires {@link
568      * #cleanConfigurationData()} to be called to clean up the files.
569      *
570      * @param resolver the {@link DynamicRemoteFileResolver} to resolve the files
571      * @throws BuildRetrievalError
572      * @throws ConfigurationException
573      */
resolveDynamicOptions(DynamicRemoteFileResolver resolver)574     public void resolveDynamicOptions(DynamicRemoteFileResolver resolver)
575             throws ConfigurationException, BuildRetrievalError;
576 
577     /** Delete any files that was downloaded to resolved Option fields of remote files. */
cleanConfigurationData()578     public void cleanConfigurationData();
579 
580     /** Add files that must be cleaned during {@link #cleanConfigurationData()} */
addFilesToClean(Set<File> toBeCleaned)581     public void addFilesToClean(Set<File> toBeCleaned);
582 
583     /** Get the list of files that will be cleaned during {@link #cleanConfigurationData()} */
getFilesToClean()584     public Set<File> getFilesToClean();
585 
586     /** Get the option names that did not change any values */
getInopOptions()587     public Set<String> getInopOptions();
588 
589     /**
590      * Sets the command line used to create this {@link IConfiguration}.
591      * This stores the whole command line, including the configuration name,
592      * unlike setOptionsFromCommandLineArgs.
593      *
594      * @param arrayArgs the command line
595      */
setCommandLine(String[] arrayArgs)596     public void setCommandLine(String[] arrayArgs);
597 
598     /**
599      * Gets the command line used to create this {@link IConfiguration}.
600      *
601      * @return the command line used to create this {@link IConfiguration}.
602      */
getCommandLine()603     public String getCommandLine();
604 
605     /**
606      * Gets the expanded XML file for the config with all options shown for this
607      * {@link IConfiguration} as a {@link String}.
608      *
609      * @param output the writer to print the xml to.
610      * @throws IOException
611      */
dumpXml(PrintWriter output)612     public void dumpXml(PrintWriter output) throws IOException;
613 
614     /**
615      * Gets the expanded XML file for the config with all options shown for this {@link
616      * IConfiguration} minus the objects filters by their key name.
617      *
618      * <p>Filter example: {@link Configuration#TARGET_PREPARER_TYPE_NAME}.
619      *
620      * @param output the writer to print the xml to.
621      * @param excludeFilters the list of object type that should not be dumped.
622      * @throws IOException
623      */
dumpXml(PrintWriter output, List<String> excludeFilters)624     public void dumpXml(PrintWriter output, List<String> excludeFilters) throws IOException;
625 
626     /**
627      * Gets the expanded XML file for the config with all options shown for this {@link
628      * IConfiguration} minus the objects filters by their key name.
629      *
630      * <p>Filter example: {@link Configuration#TARGET_PREPARER_TYPE_NAME}.
631      *
632      * @param output the writer to print the xml to.
633      * @param excludeFilters the list of object type that should not be dumped.
634      * @param printDeprecatedOptions Whether or not to print options marked as deprecated
635      * @throws IOException
636      */
dumpXml( PrintWriter output, List<String> excludeFilters, boolean printDeprecatedOptions, boolean printUnchangedOptions)637     public void dumpXml(
638             PrintWriter output,
639             List<String> excludeFilters,
640             boolean printDeprecatedOptions,
641             boolean printUnchangedOptions)
642             throws IOException;
643 }
644