/** * Get an ordered list of {@link TransferPluginOption}s, given class a {@link TransferSettings} class. * * <p>This method uses the {@link Setup} and {@link Element} annotation, and their attributes * to sort the options. If no annotation is given or no order attribute is provided, the * option will be listed last. */ public static List<TransferPluginOption> getOrderedOptions(Class<? extends TransferSettings> transferSettingsClass) { return getOrderedOptions(transferSettingsClass, 0); }
@SuppressWarnings("unchecked") private static TransferPluginOption createNestedOption(Field field, int level, String name, String description, FileType fileType, boolean encrypted, boolean sensitive, boolean singular, boolean visible, boolean required, Class<? extends TransferPluginOptionCallback> callback, Class<? extends TransferPluginOptionConverter> converter) { if (++level > MAX_NESTED_LEVELS) { throw new RuntimeException("Plugin uses too many nested transfer settings (max allowed value: " + MAX_NESTED_LEVELS + ")"); } Class<? extends TransferSettings> fieldClass = (Class<? extends TransferSettings>) field.getType(); return new NestedTransferPluginOption(field, name, description, fieldClass, fileType, encrypted, sensitive, singular, visible, required, callback, converter, getOrderedOptions(fieldClass)); }
List<TransferPluginOption> pluginOptions = TransferPluginOptions.getOrderedOptions(settings.getClass());
@Test public void testGetOrderedOptionsWithAnotherDummyPlugin() { List<TransferPluginOption> orderedOptions = TransferPluginOptions.getOrderedOptions(AnotherDummyTransferSettings.class); assertEquals(4, orderedOptions.size()); assertEquals("noSetupAnnotation", orderedOptions.get(0).getName()); assertEquals("singularNonVisible", orderedOptions.get(1).getName()); assertEquals("someCallback", orderedOptions.get(2).getName()); assertEquals("someInvalidCallback", orderedOptions.get(3).getName()); }
@Test public void testGetOrderedOptionsWithDummyPlugin() { List<TransferPluginOption> orderedOptions = TransferPluginOptions.getOrderedOptions(DummyTransferSettings.class); assertEquals(6, orderedOptions.size()); assertEquals("foo", orderedOptions.get(0).getName()); assertEquals("number", orderedOptions.get(1).getName()); assertEquals("baz", orderedOptions.get(2).getName()); assertEquals("nest", orderedOptions.get(3).getName()); assertEquals("nest2", orderedOptions.get(4).getName()); assertEquals("enumField", orderedOptions.get(5).getName()); }
nestPrefix = nestPrefix + option.getName() + NESTED_OPTIONS_SEPARATOR; for (TransferPluginOption nestedOption : TransferPluginOptions.getOrderedOptions(childSettings.getClass())) { askPluginSettings(childSettings, nestedOption, knownPluginSettings, nestPrefix);