| | |
| | | * Portions Copyright 2014-2015 ForgeRock AS |
| | | */ |
| | | |
| | | |
| | | package org.opends.guitools.controlpanel.ui; |
| | | |
| | | import static org.opends.messages.AdminToolMessages.*; |
| | |
| | | /** |
| | | * Abstract class used to refactor some code between the classes that are used |
| | | * to edit/create an index. |
| | | * |
| | | */ |
| | | public abstract class AbstractIndexPanel extends StatusGenericPanel |
| | | abstract class AbstractIndexPanel extends StatusGenericPanel |
| | | { |
| | | private static final long serialVersionUID = 4465529396749593707L; |
| | | /** |
| | | * Title panel. |
| | | */ |
| | | protected TitlePanel titlePanel = new TitlePanel(LocalizableMessage.EMPTY, |
| | | LocalizableMessage.EMPTY); |
| | | /** |
| | | * Attributes combo box. |
| | | */ |
| | | protected JComboBox attributes = Utilities.createComboBox(); |
| | | /** |
| | | * Name of the index label. |
| | | */ |
| | | protected JLabel name = Utilities.createDefaultLabel(); |
| | | /** |
| | | * Backends label. |
| | | */ |
| | | protected JLabel lBackend = Utilities.createPrimaryLabel( |
| | | INFO_CTRL_PANEL_BACKEND_LABEL.get()); |
| | | /** |
| | | * Read-only backend name label. |
| | | */ |
| | | protected JLabel backendName = Utilities.createDefaultLabel(); |
| | | /** |
| | | * Label for attribute. |
| | | */ |
| | | protected JLabel lAttribute = |
| | | Utilities.createPrimaryLabel(INFO_CTRL_PANEL_ATTRIBUTE_LABEL.get()); |
| | | /** |
| | | * Label for entry limit. |
| | | */ |
| | | protected JLabel lEntryLimit = |
| | | Utilities.createPrimaryLabel(INFO_CTRL_PANEL_ENTRY_LIMIT_LABEL.get()); |
| | | /** |
| | | * Entry limit text field. |
| | | */ |
| | | protected JTextField entryLimit = Utilities.createShortTextField(); |
| | | /** |
| | | * Label for type. |
| | | */ |
| | | protected JLabel lType = |
| | | Utilities.createPrimaryLabel(INFO_CTRL_PANEL_INDEX_TYPE_LABEL.get()); |
| | | /** |
| | | * Approximate index type check box. |
| | | */ |
| | | protected JCheckBox approximate = |
| | | Utilities.createCheckBox(INFO_CTRL_PANEL_APPROXIMATE_LABEL.get()); |
| | | /** |
| | | * Equality index type check box. |
| | | */ |
| | | protected JCheckBox equality = |
| | | Utilities.createCheckBox(INFO_CTRL_PANEL_EQUALITY_LABEL.get()); |
| | | /** |
| | | * Ordering index type check box. |
| | | */ |
| | | protected JCheckBox ordering = |
| | | Utilities.createCheckBox(INFO_CTRL_PANEL_ORDERING_LABEL.get()); |
| | | /** |
| | | * Presence index type check box. |
| | | */ |
| | | protected JCheckBox presence = |
| | | Utilities.createCheckBox(INFO_CTRL_PANEL_PRESENCE_LABEL.get()); |
| | | /** |
| | | * Substring index type check box. |
| | | */ |
| | | protected JCheckBox substring = |
| | | Utilities.createCheckBox(INFO_CTRL_PANEL_SUBSTRING_LABEL.get()); |
| | | /** |
| | | * Delete index button. |
| | | */ |
| | | protected JButton deleteIndex = |
| | | Utilities.createButton(INFO_CTRL_PANEL_DELETE_INDEX_LABEL.get()); |
| | | /** |
| | | * Save changes button. |
| | | */ |
| | | protected JButton saveChanges = |
| | | Utilities.createButton(INFO_CTRL_PANEL_SAVE_CHANGES_LABEL.get()); |
| | | /** |
| | | * Label containing some warning information (such as the fact that the index |
| | | * cannot be edited). |
| | | */ |
| | | protected JLabel warning = Utilities.createDefaultLabel(); |
| | | /** |
| | | * Panel containing all the index types. |
| | | */ |
| | | protected JPanel typesPanel = new JPanel(new GridBagLayout()); |
| | | |
| | | /** |
| | | * LocalizableMessage to be displayed to indicate that an index is not configurable. |
| | | */ |
| | | protected LocalizableMessage NON_CONFIGURABLE_INDEX = |
| | | INFO_CTRL_PANEL_NON_CONFIGURABLE_INDEX_LABEL.get(); |
| | | /** Custom attributes message. */ |
| | | static LocalizableMessage CUSTOM_ATTRIBUTES = INFO_CTRL_PANEL_CUSTOM_ATTRIBUTES_LABEL.get(); |
| | | |
| | | /** |
| | | * LocalizableMessage to be displayed to indicate that an index has been modified. |
| | | */ |
| | | protected LocalizableMessage INDEX_MODIFIED = INFO_CTRL_PANEL_INDEX_MODIFIED_LABEL.get(); |
| | | /** Standard attributes message. */ |
| | | static LocalizableMessage STANDARD_ATTRIBUTES = INFO_CTRL_PANEL_STANDARD_ATTRIBUTES_LABEL.get(); |
| | | |
| | | /** |
| | | * Array of checkboxes. |
| | | */ |
| | | protected JCheckBox[] types = {approximate, equality, ordering, presence, |
| | | substring}; |
| | | /** Minimum value for entry limit. */ |
| | | static final int MIN_ENTRY_LIMIT = |
| | | LocalDBIndexCfgDefn.getInstance().getIndexEntryLimitPropertyDefinition().getLowerLimit(); |
| | | |
| | | /** |
| | | * Array of index types that matches the array of checkboxes (types). |
| | | */ |
| | | protected IndexTypeDescriptor[] configTypes = { |
| | | IndexTypeDescriptor.APPROXIMATE, IndexTypeDescriptor.EQUALITY, |
| | | IndexTypeDescriptor.ORDERING, IndexTypeDescriptor.PRESENCE, |
| | | IndexTypeDescriptor.SUBSTRING |
| | | }; |
| | | /** Maximum value for entry limit. */ |
| | | static final int MAX_ENTRY_LIMIT = |
| | | LocalDBIndexCfgDefn.getInstance().getIndexEntryLimitPropertyDefinition().getUpperLimit(); |
| | | |
| | | /** |
| | | * Custom attributes message. |
| | | */ |
| | | protected LocalizableMessage CUSTOM_ATTRIBUTES = |
| | | INFO_CTRL_PANEL_CUSTOM_ATTRIBUTES_LABEL.get(); |
| | | /** |
| | | * Standard attributes message. |
| | | */ |
| | | protected LocalizableMessage STANDARD_ATTRIBUTES = |
| | | INFO_CTRL_PANEL_STANDARD_ATTRIBUTES_LABEL.get(); |
| | | /** LocalizableMessage to be displayed to indicate that an index is not configurable. */ |
| | | static LocalizableMessage NON_CONFIGURABLE_INDEX = INFO_CTRL_PANEL_NON_CONFIGURABLE_INDEX_LABEL.get(); |
| | | |
| | | /** |
| | | * Minimum value for entry limit. |
| | | */ |
| | | protected final int MIN_ENTRY_LIMIT = |
| | | LocalDBIndexCfgDefn.getInstance().getIndexEntryLimitPropertyDefinition(). |
| | | getLowerLimit(); |
| | | /** |
| | | * Maximum value for entry limit. |
| | | */ |
| | | protected final int MAX_ENTRY_LIMIT = |
| | | LocalDBIndexCfgDefn.getInstance().getIndexEntryLimitPropertyDefinition(). |
| | | getUpperLimit(); |
| | | /** LocalizableMessage to be displayed to indicate that an index has been modified. */ |
| | | static LocalizableMessage INDEX_MODIFIED = INFO_CTRL_PANEL_INDEX_MODIFIED_LABEL.get(); |
| | | |
| | | /** |
| | | * Default value for entry limit. |
| | | */ |
| | | protected final int DEFAULT_ENTRY_LIMIT = 4000; |
| | | /** Default value for entry limit. */ |
| | | static final int DEFAULT_ENTRY_LIMIT = 4000; |
| | | |
| | | TitlePanel titlePanel = new TitlePanel(LocalizableMessage.EMPTY, LocalizableMessage.EMPTY); |
| | | |
| | | /** Attributes combo box. */ |
| | | JComboBox attributes = Utilities.createComboBox(); |
| | | |
| | | /** Name of the index label. */ |
| | | JLabel name = Utilities.createDefaultLabel(); |
| | | |
| | | /** Backends label. */ |
| | | JLabel lBackend = Utilities.createPrimaryLabel(INFO_CTRL_PANEL_BACKEND_LABEL.get()); |
| | | |
| | | /** Read-only backend name label. */ |
| | | JLabel backendName = Utilities.createDefaultLabel(); |
| | | |
| | | JLabel lAttribute = Utilities.createPrimaryLabel(INFO_CTRL_PANEL_ATTRIBUTE_LABEL.get()); |
| | | |
| | | JLabel lEntryLimit = Utilities.createPrimaryLabel(INFO_CTRL_PANEL_ENTRY_LIMIT_LABEL.get()); |
| | | |
| | | JTextField entryLimit = Utilities.createShortTextField(); |
| | | |
| | | JLabel lType = Utilities.createPrimaryLabel(INFO_CTRL_PANEL_INDEX_TYPE_LABEL.get()); |
| | | |
| | | /** Approximate index type check box. */ |
| | | JCheckBox approximate = Utilities.createCheckBox(INFO_CTRL_PANEL_APPROXIMATE_LABEL.get()); |
| | | |
| | | /** Equality index type check box. */ |
| | | JCheckBox equality = Utilities.createCheckBox(INFO_CTRL_PANEL_EQUALITY_LABEL.get()); |
| | | |
| | | /** Ordering index type check box. */ |
| | | JCheckBox ordering = Utilities.createCheckBox(INFO_CTRL_PANEL_ORDERING_LABEL.get()); |
| | | |
| | | /** Presence index type check box. */ |
| | | JCheckBox presence = Utilities.createCheckBox(INFO_CTRL_PANEL_PRESENCE_LABEL.get()); |
| | | |
| | | /** Substring index type check box. */ |
| | | JCheckBox substring = Utilities.createCheckBox(INFO_CTRL_PANEL_SUBSTRING_LABEL.get()); |
| | | |
| | | JButton deleteIndex = Utilities.createButton(INFO_CTRL_PANEL_DELETE_INDEX_LABEL.get()); |
| | | |
| | | JButton saveChanges = Utilities.createButton(INFO_CTRL_PANEL_SAVE_CHANGES_LABEL.get()); |
| | | |
| | | /** Label containing some warning information (such as the fact that the index cannot be edited). */ |
| | | JLabel warning = Utilities.createDefaultLabel(); |
| | | |
| | | /** Panel containing all the index types. */ |
| | | JPanel typesPanel = new JPanel(new GridBagLayout()); |
| | | |
| | | /** Array of checkboxes. */ |
| | | JCheckBox[] types = { approximate, equality, ordering, presence, substring }; |
| | | |
| | | /** Array of index types that matches the array of checkboxes (types). */ |
| | | IndexTypeDescriptor[] configTypes = { IndexTypeDescriptor.APPROXIMATE, IndexTypeDescriptor.EQUALITY, |
| | | IndexTypeDescriptor.ORDERING, IndexTypeDescriptor.PRESENCE, |
| | | IndexTypeDescriptor.SUBSTRING }; |
| | | |
| | | /** |
| | | * Repopulates the contents of the panel with the provided attribute type. It |
| | | * will check the checkboxes for which the attribute has a matching rule. |
| | | * @param attr the attribute. |
| | | * |
| | | * @param attr |
| | | * the attribute. |
| | | */ |
| | | protected void repopulateTypesPanel(AttributeType attr) |
| | | void repopulateTypesPanel(final AttributeType attr) |
| | | { |
| | | typesPanel.removeAll(); |
| | | GridBagConstraints gbc = new GridBagConstraints(); |
| | |
| | | { |
| | | typesPanel.add(approximate, gbc); |
| | | gbc.insets.top = 10; |
| | | gbc.gridy ++; |
| | | gbc.gridy++; |
| | | } |
| | | if (attr.getEqualityMatchingRule() != null) |
| | | { |
| | | typesPanel.add(equality, gbc); |
| | | gbc.insets.top = 10; |
| | | gbc.gridy ++; |
| | | gbc.gridy++; |
| | | } |
| | | if (attr.getOrderingMatchingRule() != null) |
| | | { |
| | | typesPanel.add(ordering, gbc); |
| | | gbc.insets.top = 10; |
| | | gbc.gridy ++; |
| | | gbc.gridy++; |
| | | } |
| | | typesPanel.add(presence, gbc); |
| | | gbc.gridx = 1; |
| | |
| | | typesPanel.add(Box.createHorizontalGlue(), gbc); |
| | | gbc.weightx = 0.0; |
| | | gbc.gridx = 0; |
| | | gbc.gridy ++; |
| | | gbc.gridy++; |
| | | gbc.insets.top = 10; |
| | | if (attr.getSubstringMatchingRule() != null) |
| | | { |
| | |
| | | |
| | | /** |
| | | * Creates the basic layout of the panel. |
| | | * @param c the container of the layout. |
| | | * @param gbc the grid bag constraints to be used. |
| | | * @param nameReadOnly whether the panel is read-only or not. |
| | | * |
| | | * @param c |
| | | * the container of the layout. |
| | | * @param gbc |
| | | * the grid bag constraints to be used. |
| | | * @param nameReadOnly |
| | | * whether the panel is read-only or not. |
| | | */ |
| | | protected void createBasicLayout(Container c, GridBagConstraints gbc, |
| | | boolean nameReadOnly) |
| | | void createBasicLayout(final Container c, final GridBagConstraints gbc, final boolean nameReadOnly) |
| | | { |
| | | gbc.gridx = 0; |
| | | gbc.gridy = 0; |
| | |
| | | |
| | | if (nameReadOnly) |
| | | { |
| | | gbc.gridy ++; |
| | | gbc.gridy++; |
| | | titlePanel.setTitle(INFO_CTRL_PANEL_INDEX_DETAILS_LABEL.get()); |
| | | gbc.fill = GridBagConstraints.HORIZONTAL; |
| | | gbc.anchor = GridBagConstraints.WEST; |
| | |
| | | } |
| | | |
| | | gbc.gridwidth = 1; |
| | | gbc.gridy ++; |
| | | gbc.gridy++; |
| | | gbc.anchor = GridBagConstraints.WEST; |
| | | gbc.fill = GridBagConstraints.HORIZONTAL; |
| | | gbc.insets.left = 0; |
| | |
| | | c.add(name, gbc); |
| | | } |
| | | gbc.insets.top = 10; |
| | | gbc.gridy ++; |
| | | gbc.gridy++; |
| | | gbc.insets.left = 0; |
| | | gbc.gridx = 0; |
| | | c.add(lBackend, gbc); |
| | |
| | | gbc.gridx = 1; |
| | | c.add(backendName, gbc); |
| | | |
| | | gbc.gridy ++; |
| | | gbc.gridy++; |
| | | gbc.insets.left = 0; |
| | | gbc.gridx = 0; |
| | | c.add(lEntryLimit, gbc); |
| | |
| | | gbc2.weightx = 1.0; |
| | | p.add(Box.createHorizontalGlue(), gbc2); |
| | | |
| | | |
| | | gbc.gridx = 0; |
| | | gbc.insets.left = 0; |
| | | gbc.gridy ++; |
| | | gbc.gridy++; |
| | | gbc.weightx = 0.0; |
| | | gbc.weightx = 0.0; |
| | | gbc.anchor = GridBagConstraints.NORTHWEST; |
| | |
| | | gbc.anchor = GridBagConstraints.WEST; |
| | | gbc.insets.left = 10; |
| | | gbc.weightx = 1.0; |
| | | JCheckBox[] types = {approximate, equality, ordering, presence, substring}; |
| | | JCheckBox[] types = { approximate, equality, ordering, presence, substring }; |
| | | typesPanel.setOpaque(false); |
| | | c.add(typesPanel, gbc); |
| | | gbc.gridy ++; |
| | | gbc.gridy++; |
| | | gbc2 = new GridBagConstraints(); |
| | | gbc.gridwidth = GridBagConstraints.REMAINDER; |
| | | for (int i=0; i<types.length; i++) |
| | | for (int i = 0; i < types.length; i++) |
| | | { |
| | | types[i].setOpaque(false); |
| | | typesPanel.add(types[i], gbc2); |
| | |
| | | } |
| | | |
| | | /** |
| | | * Returns a sorted set of index types (that matches what the user selected |
| | | * on the check boxes). |
| | | * @return a sorted set of indexes (that matches what the user selected |
| | | * on the check boxes). |
| | | * Returns a sorted set of index types (that matches what the user selected on |
| | | * the check boxes). |
| | | * |
| | | * @return a sorted set of indexes (that matches what the user selected on the |
| | | * check boxes). |
| | | */ |
| | | protected SortedSet<IndexTypeDescriptor> getTypes() |
| | | SortedSet<IndexTypeDescriptor> getTypes() |
| | | { |
| | | SortedSet<IndexTypeDescriptor> indexTypes = new TreeSet<IndexTypeDescriptor>(); |
| | | for (int i=0; i<types.length; i++) |
| | | for (int i = 0; i < types.length; i++) |
| | | { |
| | | if (types[i].isSelected()) |
| | | { |
| | |
| | | /** |
| | | * Returns a list of error message with the problems encountered in the data |
| | | * provided by the user. |
| | | * |
| | | * @return a list of error message with the problems encountered in the data |
| | | * provided by the user. |
| | | * provided by the user. |
| | | */ |
| | | protected List<LocalizableMessage> getErrors() |
| | | List<LocalizableMessage> getErrors() |
| | | { |
| | | ArrayList<LocalizableMessage> errors = new ArrayList<LocalizableMessage>(); |
| | | List<LocalizableMessage> errors = new ArrayList<LocalizableMessage>(); |
| | | setPrimaryValid(lEntryLimit); |
| | | setPrimaryValid(lType); |
| | | |
| | |
| | | try |
| | | { |
| | | int n = Integer.parseInt(newEntryLimit); |
| | | if ((n < MIN_ENTRY_LIMIT) || |
| | | (n > MAX_ENTRY_LIMIT)) |
| | | if (n < MIN_ENTRY_LIMIT || n > MAX_ENTRY_LIMIT) |
| | | { |
| | | errors.add(ERR_CTRL_PANEL_INVALID_ENTRY_LIMIT_LABEL.get( |
| | | MIN_ENTRY_LIMIT, MAX_ENTRY_LIMIT)); |
| | | errors.add(ERR_CTRL_PANEL_INVALID_ENTRY_LIMIT_LABEL.get(MIN_ENTRY_LIMIT, MAX_ENTRY_LIMIT)); |
| | | setPrimaryInvalid(lEntryLimit); |
| | | } |
| | | } |
| | | catch (Throwable t) |
| | | { |
| | | errors.add(ERR_CTRL_PANEL_INVALID_ENTRY_LIMIT_LABEL.get( |
| | | MIN_ENTRY_LIMIT, MAX_ENTRY_LIMIT)); |
| | | errors.add(ERR_CTRL_PANEL_INVALID_ENTRY_LIMIT_LABEL.get(MIN_ENTRY_LIMIT, MAX_ENTRY_LIMIT)); |
| | | setPrimaryInvalid(lEntryLimit); |
| | | } |
| | | |