| | |
| | | PropertyDefinition<?> pd2 = mod.getPropertyDefinition(propertyName); |
| | | |
| | | DefaultBehaviorQuery<?> query = query(pd2); |
| | | return new DefaultBehaviorQuery<T>(Type.INHERITED, query.getAliasDescription()); |
| | | return new DefaultBehaviorQuery<>(Type.INHERITED, query.getAliasDescription()); |
| | | } |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public DefaultBehaviorQuery<T> visitAlias(AliasDefaultBehaviorProvider<T> d, |
| | | PropertyDefinition<T> p) { |
| | | return new DefaultBehaviorQuery<T>(Type.ALIAS, d.getSynopsis()); |
| | | return new DefaultBehaviorQuery<>(Type.ALIAS, d.getSynopsis()); |
| | | } |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public DefaultBehaviorQuery<T> visitDefined(DefinedDefaultBehaviorProvider<T> d, |
| | | PropertyDefinition<T> p) { |
| | | return new DefaultBehaviorQuery<T>(Type.DEFINED, null); |
| | | return new DefaultBehaviorQuery<>(Type.DEFINED, null); |
| | | } |
| | | |
| | | /** {@inheritDoc} */ |
| | |
| | | PropertyDefinition<?> pd2 = mod.getPropertyDefinition(propertyName); |
| | | |
| | | DefaultBehaviorQuery<?> query = query(pd2); |
| | | return new DefaultBehaviorQuery<T>(Type.INHERITED, query.getAliasDescription()); |
| | | return new DefaultBehaviorQuery<>(Type.INHERITED, query.getAliasDescription()); |
| | | } |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public DefaultBehaviorQuery<T> visitUndefined(UndefinedDefaultBehaviorProvider<T> d, |
| | | PropertyDefinition<T> p) { |
| | | return new DefaultBehaviorQuery<T>(Type.UNDEFINED, null); |
| | | return new DefaultBehaviorQuery<>(Type.UNDEFINED, null); |
| | | } |
| | | }; |
| | | |
| | |
| | | @Override |
| | | public <C extends ConfigurationClient, S extends Configuration> MenuResult<Void> visitAggregation( |
| | | AggregationPropertyDefinition<C, S> d, Void p) { |
| | | MenuBuilder<String> builder = new MenuBuilder<String>(app); |
| | | MenuBuilder<String> builder = new MenuBuilder<>(app); |
| | | builder.setMultipleColumnThreshold(MULTI_COLUMN_THRESHOLD); |
| | | |
| | | InstantiableRelationDefinition<C, S> rd = d.getRelationDefinition(); |
| | |
| | | } |
| | | |
| | | // Create a list of possible names. |
| | | Set<String> values = new TreeSet<String>(d); |
| | | Set<String> values = new TreeSet<>(d); |
| | | ManagedObjectPath<?, ?> path = d.getParentPath(); |
| | | try { |
| | | values.addAll(Arrays.asList(context.listManagedObjects(path, rd))); |
| | |
| | | LocalizableMessage option = getPropertyValues(d, Collections.singleton(value)); |
| | | builder.addNumberedOption(option, MenuResult.success(value)); |
| | | } |
| | | MenuCallback<String> callback = new CreateComponentCallback<C, S>(d); |
| | | MenuCallback<String> callback = new CreateComponentCallback<>(d); |
| | | builder.addNumberedOption( |
| | | INFO_EDITOR_OPTION_CREATE_A_NEW_COMPONENT.get(rd.getUserFriendlyName()), callback); |
| | | |
| | |
| | | return MenuResult.cancel(); |
| | | } else { |
| | | Collection<String> newValues = result.getValues(); |
| | | SortedSet<String> oldValues = new TreeSet<String>(mo.getPropertyValues(d)); |
| | | SortedSet<String> oldValues = new TreeSet<>(mo.getPropertyValues(d)); |
| | | mo.setPropertyValues(d, newValues); |
| | | isLastChoiceReset = false; |
| | | registerModification(d, new TreeSet<String>(newValues), oldValues); |
| | |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public MenuResult<Void> visitBoolean(BooleanPropertyDefinition d, Void p) { |
| | | MenuBuilder<Boolean> builder = new MenuBuilder<Boolean>(app); |
| | | MenuBuilder<Boolean> builder = new MenuBuilder<>(app); |
| | | |
| | | builder.setPrompt(INFO_EDITOR_PROMPT_SELECT_VALUE_SINGLE.get(d.getName())); |
| | | |
| | |
| | | return MenuResult.cancel(); |
| | | } else { |
| | | Collection<Boolean> newValues = result.getValues(); |
| | | SortedSet<Boolean> oldValues = new TreeSet<Boolean>(mo.getPropertyValues(d)); |
| | | SortedSet<Boolean> oldValues = new TreeSet<>(mo.getPropertyValues(d)); |
| | | mo.setPropertyValues(d, newValues); |
| | | isLastChoiceReset = false; |
| | | registerModification(d, new TreeSet<Boolean>(newValues), oldValues); |
| | |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public <E extends Enum<E>> MenuResult<Void> visitEnum(EnumPropertyDefinition<E> d, Void x) { |
| | | MenuBuilder<E> builder = new MenuBuilder<E>(app); |
| | | MenuBuilder<E> builder = new MenuBuilder<>(app); |
| | | builder.setMultipleColumnThreshold(MULTI_COLUMN_THRESHOLD); |
| | | |
| | | if (d.hasOption(PropertyOption.MULTI_VALUED)) { |
| | |
| | | builder.setPrompt(INFO_EDITOR_PROMPT_SELECT_VALUE_SINGLE.get(d.getName())); |
| | | } |
| | | |
| | | Set<E> values = new TreeSet<E>(d); |
| | | Set<E> values = new TreeSet<>(d); |
| | | values.addAll(EnumSet.allOf(d.getEnumClass())); |
| | | for (E value : values) { |
| | | LocalizableMessage option = getPropertyValues(d, Collections.singleton(value)); |
| | |
| | | return MenuResult.cancel(); |
| | | } else { |
| | | Collection<E> newValues = result.getValues(); |
| | | SortedSet<E> oldValues = new TreeSet<E>(mo.getPropertyValues(d)); |
| | | SortedSet<E> oldValues = new TreeSet<>(mo.getPropertyValues(d)); |
| | | mo.setPropertyValues(d, newValues); |
| | | isLastChoiceReset = false; |
| | | registerModification(d, new TreeSet<E>(newValues), oldValues); |
| | |
| | | // Set the new property value(s). |
| | | try { |
| | | SortedSet<T> values = readPropertyValues(app, mo.getManagedObjectDefinition(), d); |
| | | SortedSet<T> oldValues = new TreeSet<T>(mo.getPropertyValues(d)); |
| | | SortedSet<T> oldValues = new TreeSet<>(mo.getPropertyValues(d)); |
| | | mo.setPropertyValues(d, values); |
| | | isLastChoiceReset = false; |
| | | registerModification(d, values, oldValues); |
| | |
| | | } |
| | | |
| | | // Create a list of possible names. |
| | | final Set<String> values = new TreeSet<String>(d); |
| | | final Set<String> values = new TreeSet<>(d); |
| | | ManagedObjectPath<?, ?> path = d.getParentPath(); |
| | | try { |
| | | values.addAll(Arrays.asList(context.listManagedObjects(path, rd))); |
| | |
| | | |
| | | @Override |
| | | public MenuResult<Boolean> invoke(ConsoleApplication app) throws ClientException { |
| | | MenuBuilder<String> builder = new MenuBuilder<String>(app); |
| | | MenuBuilder<String> builder = new MenuBuilder<>(app); |
| | | |
| | | builder.setPrompt(INFO_EDITOR_PROMPT_SELECT_COMPONENTS_ADD.get(ufpn)); |
| | | builder.setAllowMultiSelect(true); |
| | |
| | | LocalizableMessage svalue = getPropertyValues(d, Collections.singleton(value)); |
| | | builder.addNumberedOption(svalue, MenuResult.success(value)); |
| | | } |
| | | MenuCallback<String> callback = new CreateComponentCallback<C, S>(d); |
| | | MenuCallback<String> callback = new CreateComponentCallback<>(d); |
| | | builder.addNumberedOption( |
| | | INFO_EDITOR_OPTION_CREATE_A_NEW_COMPONENT.get(rd.getUserFriendlyName()), callback); |
| | | |
| | |
| | | |
| | | @Override |
| | | public MenuResult<Boolean> invoke(ConsoleApplication app) throws ClientException { |
| | | MenuBuilder<String> builder = new MenuBuilder<String>(app); |
| | | MenuBuilder<String> builder = new MenuBuilder<>(app); |
| | | |
| | | builder.setPrompt(INFO_EDITOR_PROMPT_SELECT_COMPONENTS_REMOVE.get(ufpn)); |
| | | builder.setAllowMultiSelect(true); |
| | |
| | | |
| | | @Override |
| | | public MenuResult<Boolean> invoke(ConsoleApplication app) throws ClientException { |
| | | MenuBuilder<T> builder = new MenuBuilder<T>(app); |
| | | MenuBuilder<T> builder = new MenuBuilder<>(app); |
| | | |
| | | builder.setPrompt(INFO_EDITOR_PROMPT_SELECT_VALUES_ADD.get()); |
| | | builder.setAllowMultiSelect(true); |
| | |
| | | |
| | | @Override |
| | | public MenuResult<Boolean> invoke(ConsoleApplication app) throws ClientException { |
| | | MenuBuilder<T> builder = new MenuBuilder<T>(app); |
| | | MenuBuilder<T> builder = new MenuBuilder<>(app); |
| | | |
| | | builder.setPrompt(INFO_EDITOR_PROMPT_SELECT_VALUES_REMOVE.get()); |
| | | builder.setAllowMultiSelect(true); |
| | |
| | | @Override |
| | | public MenuResult<Boolean> invoke(ConsoleApplication app) throws ClientException { |
| | | app.println(); |
| | | SortedSet<T> previousValues = new TreeSet<T>(currentValues); |
| | | SortedSet<T> previousValues = new TreeSet<>(currentValues); |
| | | readPropertyValues(app, mo.getManagedObjectDefinition(), d, currentValues); |
| | | SortedSet<T> addedValues = new TreeSet<T>(currentValues); |
| | | SortedSet<T> addedValues = new TreeSet<>(currentValues); |
| | | addedValues.removeAll(previousValues); |
| | | isLastChoiceReset = false; |
| | | return MenuResult.success(false); |
| | |
| | | |
| | | @Override |
| | | public MenuResult<Boolean> invoke(ConsoleApplication app) throws ClientException { |
| | | MenuBuilder<T> builder = new MenuBuilder<T>(app); |
| | | MenuBuilder<T> builder = new MenuBuilder<>(app); |
| | | |
| | | builder.setPrompt(INFO_EDITOR_PROMPT_SELECT_VALUES_REMOVE.get()); |
| | | builder.setAllowMultiSelect(true); |
| | |
| | | final SortedSet<T> defaultValues, final SortedSet<T> oldValues, final SortedSet<T> currentValues, |
| | | MenuCallback<Boolean> addCallback, MenuCallback<Boolean> removeCallback) { |
| | | // Construct a menu of actions. |
| | | MenuBuilder<Boolean> builder = new MenuBuilder<Boolean>(app); |
| | | MenuBuilder<Boolean> builder = new MenuBuilder<>(app); |
| | | builder.setPrompt(INFO_EDITOR_PROMPT_MODIFY_MENU.get(d.getName())); |
| | | |
| | | // First option is for leaving the property unchanged or |
| | |
| | | public <C extends ConfigurationClient, S extends Configuration> MenuResult<Boolean> visitAggregation( |
| | | AggregationPropertyDefinition<C, S> d, Void p) { |
| | | // Construct a menu of actions. |
| | | MenuBuilder<String> builder = new MenuBuilder<String>(app); |
| | | MenuBuilder<String> builder = new MenuBuilder<>(app); |
| | | builder.setMultipleColumnThreshold(MULTI_COLUMN_THRESHOLD); |
| | | builder.setPrompt(INFO_EDITOR_PROMPT_MODIFY_MENU.get(d.getName())); |
| | | |
| | |
| | | builder.setDefault(LocalizableMessage.raw("1"), MenuResult.<String> cancel()); |
| | | |
| | | // Create a list of possible names. |
| | | final Set<String> values = new TreeSet<String>(d); |
| | | final Set<String> values = new TreeSet<>(d); |
| | | ManagedObjectPath<?, ?> path = d.getParentPath(); |
| | | InstantiableRelationDefinition<C, S> rd = d.getRelationDefinition(); |
| | | try { |
| | |
| | | |
| | | builder.addNumberedOption(option, MenuResult.success(value)); |
| | | } |
| | | MenuCallback<String> callback = new CreateComponentCallback<C, S>(d); |
| | | MenuCallback<String> callback = new CreateComponentCallback<>(d); |
| | | builder.addNumberedOption(INFO_EDITOR_OPTION_CREATE_A_NEW_COMPONENT.get(ufn), callback); |
| | | |
| | | // Third option is to reset the value back to its default. |
| | |
| | | @Override |
| | | public MenuResult<Boolean> visitBoolean(BooleanPropertyDefinition d, Void p) { |
| | | // Construct a menu of actions. |
| | | MenuBuilder<Boolean> builder = new MenuBuilder<Boolean>(app); |
| | | MenuBuilder<Boolean> builder = new MenuBuilder<>(app); |
| | | builder.setPrompt(INFO_EDITOR_PROMPT_MODIFY_MENU.get(d.getName())); |
| | | |
| | | DefaultBehaviorQuery<Boolean> query = DefaultBehaviorQuery.query(d); |
| | |
| | | @Override |
| | | public <E extends Enum<E>> MenuResult<Boolean> visitEnum(EnumPropertyDefinition<E> d, Void p) { |
| | | // Construct a menu of actions. |
| | | MenuBuilder<E> builder = new MenuBuilder<E>(app); |
| | | MenuBuilder<E> builder = new MenuBuilder<>(app); |
| | | builder.setMultipleColumnThreshold(MULTI_COLUMN_THRESHOLD); |
| | | builder.setPrompt(INFO_EDITOR_PROMPT_MODIFY_MENU.get(d.getName())); |
| | | |
| | |
| | | builder.setDefault(LocalizableMessage.raw("1"), MenuResult.<E> cancel()); |
| | | |
| | | // Create options for changing to other values. |
| | | Set<E> values = new TreeSet<E>(d); |
| | | Set<E> values = new TreeSet<>(d); |
| | | values.addAll(EnumSet.allOf(d.getEnumClass())); |
| | | for (E value : values) { |
| | | if (value.equals(currentValue) && query.isDefined()) { |
| | |
| | | displayPropertySyntax(app, d); |
| | | |
| | | // Construct a menu of actions. |
| | | MenuBuilder<T> builder = new MenuBuilder<T>(app); |
| | | MenuBuilder<T> builder = new MenuBuilder<>(app); |
| | | builder.setPrompt(INFO_EDITOR_PROMPT_MODIFY_MENU.get(d.getName())); |
| | | |
| | | // First option is for leaving the property unchanged. |
| | |
| | | // Both newValues and oldValues sets need to use the PropertyDefinition |
| | | // as their comparator. Constructing a TreeSet<T> directly with the |
| | | // values collection will fail if the values are e.g. InetAddresses. |
| | | SortedSet<T> newValues = new TreeSet<T>(d); |
| | | SortedSet<T> newValues = new TreeSet<>(d); |
| | | newValues.addAll(values); |
| | | SortedSet<T> oldValues = new TreeSet<T>(mo.getPropertyValues(d)); |
| | | SortedSet<T> oldValues = new TreeSet<>(mo.getPropertyValues(d)); |
| | | mo.setPropertyValues(d, values); |
| | | |
| | | // If there are no values when we do a reset. |
| | |
| | | rows += sz % 2; |
| | | } |
| | | |
| | | List<T> vl = new ArrayList<T>(values); |
| | | List<T> vl = new ArrayList<>(values); |
| | | for (int i = 0, j = rows; i < rows; i++, j++) { |
| | | builder.startRow(); |
| | | builder.appendCell("*)"); |
| | |
| | | /** Read new values for a property. */ |
| | | private static <T> SortedSet<T> readPropertyValues(ConsoleApplication app, ManagedObjectDefinition<?, ?> d, |
| | | PropertyDefinition<T> pd) throws ClientException { |
| | | SortedSet<T> values = new TreeSet<T>(pd); |
| | | SortedSet<T> values = new TreeSet<>(pd); |
| | | readPropertyValues(app, d, pd, values); |
| | | return values; |
| | | } |
| | |
| | | /** |
| | | * The modifications performed: we assume that at most there is one modification per property definition. |
| | | */ |
| | | private final List<PropertyEditorModification<?>> mods = new ArrayList<PropertyEditorModification<?>>(); |
| | | private final List<PropertyEditorModification<?>> mods = new ArrayList<>(); |
| | | |
| | | /** |
| | | * Whether the last type of choice made by the user in a menu is a reset. |
| | | */ |
| | | /** Whether the last type of choice made by the user in a menu is a reset. */ |
| | | private boolean isLastChoiceReset; |
| | | |
| | | /** |
| | |
| | | |
| | | while (true) { |
| | | // Construct the main menu. |
| | | MenuBuilder<Boolean> builder = new MenuBuilder<Boolean>(app); |
| | | MenuBuilder<Boolean> builder = new MenuBuilder<>(app); |
| | | |
| | | String ufn = mo.getManagedObjectPath().getName(); |
| | | if (ufn == null) { |
| | |
| | | registerSetModification(pd, newValues, previousValues); |
| | | } else { |
| | | // Split into two operations: remove and add |
| | | SortedSet<T> removedValues = new TreeSet<T>(previousValues); |
| | | SortedSet<T> removedValues = new TreeSet<>(previousValues); |
| | | removedValues.removeAll(newValues); |
| | | |
| | | PropertyEditorModification<T> removeMod = PropertyEditorModification.createRemoveModification(pd, |
| | | removedValues, previousValues); |
| | | addModification(removeMod); |
| | | |
| | | SortedSet<T> retainedValues = new TreeSet<T>(previousValues); |
| | | SortedSet<T> retainedValues = new TreeSet<>(previousValues); |
| | | retainedValues.retainAll(newValues); |
| | | |
| | | SortedSet<T> addedValues = new TreeSet<T>(newValues); |
| | | SortedSet<T> addedValues = new TreeSet<>(newValues); |
| | | addedValues.removeAll(retainedValues); |
| | | |
| | | PropertyEditorModification<T> addMod = PropertyEditorModification.createAddModification(pd, |
| | |
| | | PropertyEditorModification<?> mod = getModification(pd); |
| | | SortedSet<T> originalValues; |
| | | if (mod != null) { |
| | | originalValues = new TreeSet<T>(pd); |
| | | originalValues = new TreeSet<>(pd); |
| | | castAndAddValues(originalValues, mod.getOriginalValues(), pd); |
| | | removeModification(mod); |
| | | } else { |
| | | originalValues = new TreeSet<T>(previousValues); |
| | | originalValues = new TreeSet<>(previousValues); |
| | | } |
| | | |
| | | addModification(PropertyEditorModification.createResetModification(pd, originalValues)); |
| | |
| | | PropertyEditorModification<?> mod = getModification(pd); |
| | | SortedSet<T> originalValues; |
| | | if (mod != null) { |
| | | originalValues = new TreeSet<T>(pd); |
| | | originalValues = new TreeSet<>(pd); |
| | | castAndAddValues(originalValues, mod.getOriginalValues(), pd); |
| | | removeModification(mod); |
| | | } else { |
| | | originalValues = new TreeSet<T>(previousValues); |
| | | originalValues = new TreeSet<>(previousValues); |
| | | } |
| | | addModification(PropertyEditorModification.createSetModification(pd, newValues, originalValues)); |
| | | } |
| | |
| | | PropertyEditorModification<T> newMod; |
| | | SortedSet<T> originalValues; |
| | | if (mod != null) { |
| | | originalValues = new TreeSet<T>(pd); |
| | | originalValues = new TreeSet<>(pd); |
| | | castAndAddValues(originalValues, mod.getOriginalValues(), pd); |
| | | if (mod.getType() == PropertyEditorModification.Type.ADD) { |
| | | SortedSet<T> addedValues = new TreeSet<T>(newValues); |
| | | SortedSet<T> addedValues = new TreeSet<>(newValues); |
| | | addedValues.removeAll(originalValues); |
| | | newMod = PropertyEditorModification.createAddModification(pd, addedValues, originalValues); |
| | | } else { |
| | |
| | | } |
| | | removeModification(mod); |
| | | } else { |
| | | originalValues = new TreeSet<T>(previousValues); |
| | | SortedSet<T> addedValues = new TreeSet<T>(newValues); |
| | | originalValues = new TreeSet<>(previousValues); |
| | | SortedSet<T> addedValues = new TreeSet<>(newValues); |
| | | addedValues.removeAll(originalValues); |
| | | newMod = PropertyEditorModification.createAddModification(pd, addedValues, originalValues); |
| | | } |
| | |
| | | PropertyEditorModification<T> newMod; |
| | | SortedSet<T> originalValues; |
| | | if (mod != null) { |
| | | originalValues = new TreeSet<T>(pd); |
| | | originalValues = new TreeSet<>(pd); |
| | | castAndAddValues(originalValues, mod.getOriginalValues(), pd); |
| | | if (newValues.isEmpty()) { |
| | | newMod = PropertyEditorModification.createRemoveModification(pd, originalValues, originalValues); |
| | | } else if (mod.getType() == PropertyEditorModification.Type.REMOVE) { |
| | | SortedSet<T> removedValues = new TreeSet<T>(originalValues); |
| | | SortedSet<T> removedValues = new TreeSet<>(originalValues); |
| | | removedValues.removeAll(newValues); |
| | | newMod = PropertyEditorModification.createRemoveModification(pd, removedValues, originalValues); |
| | | } else { |
| | |
| | | } |
| | | removeModification(mod); |
| | | } else { |
| | | originalValues = new TreeSet<T>(previousValues); |
| | | SortedSet<T> removedValues = new TreeSet<T>(originalValues); |
| | | originalValues = new TreeSet<>(previousValues); |
| | | SortedSet<T> removedValues = new TreeSet<>(originalValues); |
| | | removedValues.removeAll(newValues); |
| | | newMod = PropertyEditorModification.createRemoveModification(pd, removedValues, originalValues); |
| | | } |