/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License, Version 1.0 only
* (the "License"). You may not use this file except in compliance
* with the License.
*
* You can obtain a copy of the license at legal-notices/CDDLv1_0.txt
* or http://forgerock.org/license/CDDLv1.0.html.
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at legal-notices/CDDLv1_0.txt.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information:
* Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*
*
* Copyright 2008-2010 Sun Microsystems, Inc.
* Portions Copyright 2014-2015 ForgeRock AS
*/
package org.opends.guitools.controlpanel.ui;
import static org.opends.messages.AdminToolMessages.*;
import java.awt.Component;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.SortedSet;
import java.util.TreeSet;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import org.forgerock.i18n.LocalizableMessage;
import org.forgerock.i18n.LocalizableMessageBuilder;
import org.forgerock.opendj.ldap.schema.AttributeUsage;
import org.forgerock.opendj.ldap.schema.MatchingRule;
import org.opends.guitools.controlpanel.datamodel.ServerDescriptor;
import org.opends.guitools.controlpanel.event.ConfigurationChangeEvent;
import org.opends.guitools.controlpanel.event.ConfigurationElementCreatedListener;
import org.opends.guitools.controlpanel.task.NewSchemaElementsTask;
import org.opends.guitools.controlpanel.task.Task;
import org.opends.guitools.controlpanel.ui.components.BasicExpander;
import org.opends.guitools.controlpanel.ui.renderer.SchemaElementComboBoxCellRenderer;
import org.opends.guitools.controlpanel.util.LowerCaseComparator;
import org.opends.guitools.controlpanel.util.Utilities;
import org.forgerock.opendj.ldap.schema.Syntax;
import org.opends.server.config.ConfigConstants;
import org.opends.server.types.AttributeType;
import org.opends.server.types.ObjectClass;
import org.opends.server.types.Schema;
import org.opends.server.util.ServerConstants;
import org.opends.server.util.StaticUtils;
/**
* The panel displayed when the user wants to define a new attribute in the
* schema.
*/
public class NewAttributePanel extends StatusGenericPanel
{
private static final long serialVersionUID = 2340170241535771321L;
private static final LocalizableMessage NO_PARENT = INFO_CTRL_PANEL_NO_PARENT_FOR_ATTRIBUTE.get();
private static final LocalizableMessage NO_MATCHING_RULE = INFO_CTRL_PANEL_NO_MATCHING_RULE_FOR_ATTRIBUTE.get();
private final JLabel lName = Utilities.createPrimaryLabel(INFO_CTRL_PANEL_ATTRIBUTE_NAME_LABEL.get());
private final JLabel lParent = Utilities.createPrimaryLabel(INFO_CTRL_PANEL_ATTRIBUTE_PARENT_LABEL.get());
private final JLabel lOID = Utilities.createPrimaryLabel(INFO_CTRL_PANEL_ATTRIBUTE_OID_LABEL.get());
private final JLabel lAliases = Utilities.createPrimaryLabel(INFO_CTRL_PANEL_ATTRIBUTE_ALIASES_LABEL.get());
private final JLabel lOrigin = Utilities.createPrimaryLabel(INFO_CTRL_PANEL_ATTRIBUTE_ORIGIN_LABEL.get());
private final JLabel lFile = Utilities.createPrimaryLabel(INFO_CTRL_PANEL_ATTRIBUTE_FILE_LABEL.get());
private final JLabel lDescription = Utilities.createPrimaryLabel(INFO_CTRL_PANEL_ATTRIBUTE_DESCRIPTION_LABEL.get());
private final JLabel lUsage = Utilities.createPrimaryLabel(INFO_CTRL_PANEL_ATTRIBUTE_USAGE_LABEL.get());
private final JLabel lSyntax = Utilities.createPrimaryLabel(INFO_CTRL_PANEL_ATTRIBUTE_SYNTAX_LABEL.get());
private final JLabel lApproximate = Utilities.createPrimaryLabel(
INFO_CTRL_PANEL_ATTRIBUTE_APPROXIMATE_MATCHING_RULE_LABEL.get());
private final JLabel lEquality = Utilities.createPrimaryLabel(
INFO_CTRL_PANEL_ATTRIBUTE_EQUALITY_MATCHING_RULE_LABEL.get());
private final JLabel lOrdering = Utilities.createPrimaryLabel(
INFO_CTRL_PANEL_ATTRIBUTE_ORDERING_MATCHING_RULE_LABEL.get());
private final JLabel lSubstring = Utilities.createPrimaryLabel(
INFO_CTRL_PANEL_ATTRIBUTE_SUBSTRING_MATCHING_RULE_LABEL.get());
private final JLabel lType = Utilities.createPrimaryLabel();
private final JLabel[] labels = { lName, lParent, lOID, lAliases, lOrigin, lFile, lDescription, lUsage, lSyntax,
lApproximate, lEquality, lOrdering, lSubstring, lType };
private final JTextField name = Utilities.createMediumTextField();
private final JComboBox parent = Utilities.createComboBox();
private final JTextField oid = Utilities.createMediumTextField();
private final JTextField aliases = Utilities.createLongTextField();
private final JTextField description = Utilities.createLongTextField();
private final JTextField origin = Utilities.createLongTextField();
private final JTextField file = Utilities.createLongTextField();
private final JComboBox<AttributeUsage> usage = Utilities.createComboBox();
private final JComboBox syntax = Utilities.createComboBox();
private final JComboBox approximate = Utilities.createComboBox();
private final JComboBox equality = Utilities.createComboBox();
private final JComboBox ordering = Utilities.createComboBox();
private final JComboBox substring = Utilities.createComboBox();
private final JCheckBox nonModifiable = Utilities.createCheckBox(
INFO_CTRL_PANEL_ATTRIBUTE_NON_MODIFIABLE_LABEL.get());
private final JCheckBox singleValued = Utilities.createCheckBox(INFO_CTRL_PANEL_ATTRIBUTE_SINGLE_VALUED_LABEL.get());
private final JCheckBox collective = Utilities.createCheckBox(INFO_CTRL_PANEL_ATTRIBUTE_COLLECTIVE_LABEL.get());
private final JCheckBox obsolete = Utilities.createCheckBox(INFO_CTRL_PANEL_ATTRIBUTE_OBSOLETE_LABEL.get());
private Schema schema;
private final Component relativeComponent;
/**
* Constructor of the new attribute panel.
*
* @param relativeComponent
* the component relative to which the dialog containing this panel
* must be centered.
*/
public NewAttributePanel(Component relativeComponent)
{
this.relativeComponent = relativeComponent;
createLayout();
}
@Override
public LocalizableMessage getTitle()
{
return INFO_CTRL_PANEL_NEW_ATTRIBUTE_PANEL_TITLE.get();
}
@Override
public Component getPreferredFocusComponent()
{
return name;
}
@Override
public void configurationChanged(ConfigurationChangeEvent ev)
{
List<Syntax> newSyntaxes = new ArrayList<>();
final ServerDescriptor desc = ev.getNewDescriptor();
Schema s = desc.getSchema();
final boolean firstSchema = schema == null;
final boolean[] repack = { firstSchema };
final boolean[] error = { false };
boolean schemaChanged;
if (schema != null && s != null)
{
schemaChanged = !ServerDescriptor.areSchemasEqual(s, schema);
}
else if (schema == null && s != null)
{
schemaChanged = true;
}
else if (s == null && schema != null)
{
schemaChanged = false;
}
else
{
schemaChanged = false;
}
if (schemaChanged)
{
schema = s;
Map<String, Syntax> syntaxNameMap = new HashMap<>();
for (String key : schema.getSyntaxes().keySet())
{
Syntax syntax = schema.getSyntax(key);
String name = syntax.getName();
if (name == null)
{
name = syntax.getOID();
}
syntaxNameMap.put(name, syntax);
}
SortedSet<String> orderedKeys = new TreeSet<>(new LowerCaseComparator());
orderedKeys.addAll(syntaxNameMap.keySet());
for (String key : orderedKeys)
{
newSyntaxes.add(syntaxNameMap.get(key));
}
updateComboBoxModel(newSyntaxes, (DefaultComboBoxModel) syntax.getModel());
Map<String, AttributeType> attributeNameMap = new HashMap<>();
for (String key : schema.getAttributeTypes().keySet())
{
AttributeType attr = schema.getAttributeType(key);
attributeNameMap.put(attr.getNameOrOID(), attr);
}
orderedKeys.clear();
orderedKeys.addAll(attributeNameMap.keySet());
List<Object> newParents = new ArrayList<>();
for (String key : orderedKeys)
{
newParents.add(attributeNameMap.get(key));
}
newParents.add(0, NO_PARENT);
updateComboBoxModel(newParents, (DefaultComboBoxModel) parent.getModel());
final List<MatchingRule> availableMatchingRules = new ArrayList<>();
final Map<String, MatchingRule> matchingRuleNameMap = new HashMap<>();
for (String key : schema.getMatchingRules().keySet())
{
MatchingRule rule = schema.getMatchingRule(key);
matchingRuleNameMap.put(rule.getNameOrOID(), rule);
}
orderedKeys.clear();
orderedKeys.addAll(matchingRuleNameMap.keySet());
for (final String key : orderedKeys)
{
availableMatchingRules.add(matchingRuleNameMap.get(key));
}
final JComboBox[] combos = { approximate, equality, ordering, substring };
for (int i = 0; i < combos.length; i++)
{
final DefaultComboBoxModel model = (DefaultComboBoxModel) combos[i].getModel();
final List<Object> el = new ArrayList<Object>(availableMatchingRules);
el.add(0, model.getSize() == 0 ? NO_MATCHING_RULE : model.getElementAt(0));
updateComboBoxModel(el, model);
}
}
else if (schema == null)
{
updateErrorPane(errorPane,
ERR_CTRL_PANEL_SCHEMA_NOT_FOUND_SUMMARY.get(),
ColorAndFontConstants.errorTitleFont,
ERR_CTRL_PANEL_SCHEMA_NOT_FOUND_DETAILS.get(),
ColorAndFontConstants.defaultFont);
repack[0] = true;
error[0] = true;
}
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
setEnabledOK(!error[0]);
errorPane.setVisible(error[0]);
if (firstSchema)
{
for (int i = 0; i < syntax.getModel().getSize(); i++)
{
Syntax syn = (Syntax) syntax.getModel().getElementAt(i);
if ("DirectoryString".equals(syn.getName()))
{
syntax.setSelectedIndex(i);
break;
}
}
}
else
{
updateDefaultMatchingRuleNames();
}
if (repack[0])
{
packParentDialog();
if (relativeComponent != null)
{
Utilities.centerGoldenMean(Utilities.getParentDialog(NewAttributePanel.this), relativeComponent);
}
}
}
});
if (!error[0])
{
updateErrorPaneAndOKButtonIfAuthRequired(desc,
isLocal() ? INFO_CTRL_PANEL_AUTHENTICATION_REQUIRED_TO_CREATE_ATTRIBUTE_SUMMARY.get()
: INFO_CTRL_PANEL_CANNOT_CONNECT_TO_REMOTE_DETAILS.get(desc.getHostname()));
}
}
@Override
public void okClicked()
{
List<LocalizableMessage> errors = new ArrayList<>();
for (JLabel label : labels)
{
setPrimaryValid(label);
}
String n = getAttributeName();
LocalizableMessageBuilder err = new LocalizableMessageBuilder();
if (n.length() == 0)
{
errors.add(ERR_CTRL_PANEL_ATTRIBUTE_NAME_REQUIRED.get());
setPrimaryInvalid(lName);
}
else if (!StaticUtils.isValidSchemaElement(n, 0, n.length(), err))
{
errors.add(ERR_CTRL_PANEL_INVALID_ATTRIBUTE_NAME.get(err));
setPrimaryInvalid(lName);
err = new LocalizableMessageBuilder();
}
else
{
LocalizableMessage elementType = getSchemaElementType(n, schema);
if (elementType != null)
{
errors.add(ERR_CTRL_PANEL_ATTRIBUTE_NAME_ALREADY_IN_USE.get(n, elementType));
setPrimaryInvalid(lName);
}
}
n = oid.getText().trim();
if (n.length() > 0)
{
if (!StaticUtils.isValidSchemaElement(n, 0, n.length(), err))
{
errors.add(ERR_CTRL_PANEL_OID_NOT_VALID.get(err));
setPrimaryInvalid(lOID);
err = new LocalizableMessageBuilder();
}
else
{
LocalizableMessage elementType = getSchemaElementType(n, schema);
if (elementType != null)
{
errors.add(ERR_CTRL_PANEL_OID_ALREADY_IN_USE.get(n, elementType));
setPrimaryInvalid(lOID);
}
}
}
if (aliases.getText().trim().length() > 0)
{
String[] al = aliases.getText().split(",");
if (al.length > 0)
{
for (String alias : al)
{
if (alias.trim().length() == 0)
{
errors.add(ERR_CTRL_PANEL_EMPTY_ALIAS.get());
setPrimaryInvalid(lAliases);
}
else
{
LocalizableMessage elementType = getSchemaElementType(alias, schema);
if (elementType != null)
{
errors.add(ERR_CTRL_PANEL_ALIAS_ALREADY_IN_USE.get(n, elementType));
setPrimaryInvalid(lAliases);
}
}
}
}
}
setPrimaryValid(lUsage);
if (nonModifiable.isSelected() && AttributeUsage.USER_APPLICATIONS.equals(usage.getSelectedItem()))
{
errors.add(ERR_NON_MODIFIABLE_CANNOT_BE_USER_APPLICATIONS.get());
setPrimaryInvalid(lUsage);
}
ProgressDialog dlg = new ProgressDialog(Utilities.createFrame(), Utilities.getParentDialog(this),
INFO_CTRL_PANEL_NEW_ATTRIBUTE_PANEL_TITLE.get(), getInfo());
NewSchemaElementsTask newTask = null;
if (errors.isEmpty())
{
Set<AttributeType> attributes = new LinkedHashSet<>();
attributes.add(getAttribute());
Set<ObjectClass> ocs = new LinkedHashSet<>(0);
newTask = new NewSchemaElementsTask(getInfo(), dlg, ocs, attributes);
for (Task task : getInfo().getTasks())
{
task.canLaunch(newTask, errors);
}
for (ConfigurationElementCreatedListener listener : getConfigurationElementCreatedListeners())
{
newTask.addConfigurationElementCreatedListener(listener);
}
}
if (errors.isEmpty())
{
String attrName = getAttributeName();
launchOperation(newTask,
INFO_CTRL_PANEL_CREATING_ATTRIBUTE_SUMMARY.get(attrName),
INFO_CTRL_PANEL_CREATING_ATTRIBUTE_COMPLETE.get(),
INFO_CTRL_PANEL_CREATING_ATTRIBUTE_SUCCESSFUL.get(attrName),
ERR_CTRL_PANEL_CREATING_ATTRIBUTE_ERROR_SUMMARY.get(),
ERR_CTRL_PANEL_CREATING_ATTRIBUTE_ERROR_DETAILS.get(attrName),
null,
dlg);
dlg.setVisible(true);
name.setText("");
oid.setText("");
description.setText("");
aliases.setText("");
name.grabFocus();
Utilities.getParentDialog(this).setVisible(false);
}
else
{
displayErrorDialog(errors);
}
}
/**
* Returns the message representing the schema element type.
*
* @param name
* the name of the schema element.
* @param schema
* the schema.
* @return the message representing the schema element type.
*/
static LocalizableMessage getSchemaElementType(String name, Schema schema)
{
final String lowerCase = name.toLowerCase();
if (schema.getAttributeType(lowerCase) != null)
{
return INFO_CTRL_PANEL_TYPE_ATTRIBUTE.get();
}
else if (schema.getObjectClass(lowerCase) != null)
{
return INFO_CTRL_PANEL_TYPE_OBJECT_CLASS.get();
}
else if (schema.getSyntax(lowerCase) != null)
{
return INFO_CTRL_PANEL_TYPE_ATTRIBUTE_SYNTAX.get();
}
else if (schema.getMatchingRule(lowerCase) != null)
{
return INFO_CTRL_PANEL_TYPE_MATCHING_RULE.get();
}
for (Syntax attr : schema.getSyntaxes().values())
{
if (name.equalsIgnoreCase(attr.getName()))
{
return INFO_CTRL_PANEL_TYPE_ATTRIBUTE_SYNTAX.get();
}
}
for (MatchingRule rule : schema.getMatchingRules().values())
{
String n = rule.getNameOrOID();
if (n != null && n.equalsIgnoreCase(name))
{
return INFO_CTRL_PANEL_TYPE_MATCHING_RULE.get();
}
}
return null;
}
/** Creates the layout of the panel (but the contents are not populated here). */
private void createLayout()
{
GridBagConstraints gbc = new GridBagConstraints();
Utilities.setRequiredIcon(lName);
gbc.gridwidth = 2;
gbc.gridy = 0;
addErrorPane(gbc);
gbc.gridy++;
gbc.gridwidth = 1;
gbc.weighty = 0.0;
gbc.gridx = 1;
gbc.anchor = GridBagConstraints.EAST;
gbc.fill = GridBagConstraints.NONE;
JLabel requiredLabel = createRequiredLabel();
gbc.insets.bottom = 10;
add(requiredLabel, gbc);
gbc.gridy++;
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.anchor = GridBagConstraints.WEST;
gbc.insets.bottom = 0;
JComboBox[] comboBoxes = { parent, syntax, approximate, equality, ordering, substring };
LocalizableMessage[] defaultValues =
{ NO_PARENT, LocalizableMessage.EMPTY, NO_MATCHING_RULE, NO_MATCHING_RULE, NO_MATCHING_RULE, NO_MATCHING_RULE };
SchemaElementComboBoxCellRenderer renderer = new SchemaElementComboBoxCellRenderer(syntax);
for (int i = 0; i < comboBoxes.length; i++)
{
DefaultComboBoxModel model = new DefaultComboBoxModel(new Object[] { defaultValues[i] });
comboBoxes[i].setModel(model);
comboBoxes[i].setRenderer(renderer);
}
DefaultComboBoxModel<AttributeUsage> model = new DefaultComboBoxModel<>();
for (AttributeUsage us : AttributeUsage.values())
{
model.addElement(us);
}
usage.setModel(model);
usage.setSelectedItem(AttributeUsage.USER_APPLICATIONS);
usage.setRenderer(renderer);
Component[] basicComps = { name, oid, description, syntax };
JLabel[] basicLabels = { lName, lOID, lDescription, lSyntax };
JLabel[] basicInlineHelp = new JLabel[] {
null, null, null, Utilities.createInlineHelpLabel(INFO_CTRL_PANEL_SYNTAX_INLINE_HELP.get()) };
add(basicLabels, basicComps, basicInlineHelp, this, gbc);
BasicExpander[] expanders = new BasicExpander[] {
new BasicExpander(INFO_CTRL_PANEL_EXTRA_OPTIONS_EXPANDER.get()),
new BasicExpander(INFO_CTRL_PANEL_ATTRIBUTE_TYPE_OPTIONS_EXPANDER.get()),
new BasicExpander(INFO_CTRL_PANEL_MATCHING_RULE_OPTIONS_EXPANDER.get()) };
Component[][] comps = { { parent, aliases, origin, file },
{ usage, singleValued, nonModifiable, collective, obsolete },
{ approximate, equality, ordering, substring } };
JLabel[][] labels ={ { lParent, lAliases, lOrigin, lFile },
{ lUsage, lType, null, null, null },
{ lApproximate, lEquality, lOrdering, lSubstring } };
JLabel[][] inlineHelps = {
{ null, Utilities.createInlineHelpLabel(INFO_CTRL_PANEL_SEPARATED_WITH_COMMAS_HELP.get()), null,
Utilities.createInlineHelpLabel(INFO_CTRL_PANEL_SCHEMA_FILE_ATTRIBUTE_HELP.get(File.separator)) },
{ null, null, null, null, null, null },
{ Utilities.createInlineHelpLabel(INFO_CTRL_PANEL_MATCHING_RULE_APPROXIMATE_HELP.get()),
Utilities.createInlineHelpLabel(INFO_CTRL_PANEL_MATCHING_RULE_EQUALITY_HELP.get()),
Utilities.createInlineHelpLabel(INFO_CTRL_PANEL_MATCHING_RULE_ORDERING_HELP.get()),
Utilities.createInlineHelpLabel(INFO_CTRL_PANEL_MATCHING_RULE_SUBSTRING_HELP.get()) } };
for (int i = 0; i < expanders.length; i++)
{
gbc.gridwidth = 2;
gbc.gridx = 0;
gbc.insets.left = 0;
add(expanders[i], gbc);
final JPanel p = new JPanel(new GridBagLayout());
gbc.insets.left = 15;
gbc.gridy++;
add(p, gbc);
gbc.gridy++;
p.setOpaque(false);
GridBagConstraints gbc1 = new GridBagConstraints();
gbc1.fill = GridBagConstraints.HORIZONTAL;
gbc1.gridy = 0;
add(labels[i], comps[i], inlineHelps[i], p, gbc1);
final BasicExpander expander = expanders[i];
ChangeListener changeListener = new ChangeListener()
{
@Override
public void stateChanged(ChangeEvent e)
{
p.setVisible(expander.isSelected());
}
};
expander.addChangeListener(changeListener);
expander.setSelected(false);
changeListener.stateChanged(null);
}
addBottomGlue(gbc);
ItemListener itemListener = new ItemListener()
{
@Override
public void itemStateChanged(ItemEvent ev)
{
if (ev.getStateChange() == ItemEvent.SELECTED)
{
updateDefaultMatchingRuleNames();
approximate.setSelectedIndex(0);
substring.setSelectedIndex(0);
equality.setSelectedIndex(0);
ordering.setSelectedIndex(0);
}
}
};
syntax.addItemListener(itemListener);
file.setText(ConfigConstants.FILE_USER_SCHEMA_ELEMENTS);
}
private void updateDefaultMatchingRuleNames()
{
Syntax syn = (Syntax) syntax.getSelectedItem();
if (syn != null)
{
MatchingRule[] rules = { syn.getApproximateMatchingRule(), syn.getSubstringMatchingRule(),
syn.getEqualityMatchingRule(), syn.getOrderingMatchingRule() };
JComboBox[] combos = { approximate, substring, equality, ordering };
for (int i = 0; i < rules.length; i++)
{
DefaultComboBoxModel model = (DefaultComboBoxModel) combos[i].getModel();
int index = combos[i].getSelectedIndex();
if (model.getSize() > 0)
{
model.removeElementAt(0);
}
final LocalizableMessage msg =
rules[i] != null ? INFO_CTRL_PANEL_DEFAULT_DEFINED_IN_SYNTAX.get(rules[i].getNameOrOID())
: NO_MATCHING_RULE;
model.insertElementAt(msg, 0);
combos[i].setSelectedIndex(index);
}
}
}
private String getAttributeName()
{
return name.getText().trim();
}
private String getOID()
{
String o = oid.getText().trim();
if (o.length() == 0)
{
o = getAttributeName() + "-oid";
}
return o;
}
private List<String> getAliases()
{
List<String> al = new ArrayList<>();
String s = aliases.getText().trim();
if (s.length() > 0)
{
String[] a = s.split(",");
for (String alias : a)
{
al.add(alias.trim());
}
}
return al;
}
private List<String> getAllNames()
{
List<String> al = new ArrayList<>();
al.add(getAttributeName());
al.addAll(getAliases());
return al;
}
private AttributeType getSuperior()
{
Object o = parent.getSelectedItem();
if (NO_PARENT.equals(o))
{
return null;
}
return (AttributeType) o;
}
private MatchingRule getApproximateMatchingRule()
{
return getMatchingRule(approximate);
}
private MatchingRule getEqualityMatchingRule()
{
return getMatchingRule(equality);
}
private MatchingRule getSubstringMatchingRule()
{
return getMatchingRule(substring);
}
private MatchingRule getOrderingMatchingRule()
{
return getMatchingRule(ordering);
}
private MatchingRule getMatchingRule(JComboBox comboBox)
{
if (comboBox.getSelectedIndex() != 0)
{
return (MatchingRule) comboBox.getSelectedItem();
}
return null;
}
private Map<String, List<String>> getExtraProperties()
{
final Map<String, List<String>> map = new HashMap<>();
addExtraPropertyFromTextField(file, ServerConstants.SCHEMA_PROPERTY_FILENAME, map);
addExtraPropertyFromTextField(origin, ServerConstants.SCHEMA_PROPERTY_ORIGIN, map);
return map;
}
private void addExtraPropertyFromTextField(
final JTextField value, final String key, final Map<String, List<String>> map)
{
final String trimmedValue = value.getText().trim();
if (!trimmedValue.trim().isEmpty())
{
map.put(key, Arrays.asList(trimmedValue));
}
}
private String getDescription()
{
return description.getText().trim();
}
private AttributeType getAttribute()
{
return new AttributeType("",
getAttributeName(),
getAllNames(),
getOID(),
getDescription(),
getSuperior(),
(Syntax) syntax.getSelectedItem(),
getApproximateMatchingRule(),
getEqualityMatchingRule(),
getOrderingMatchingRule(),
getSubstringMatchingRule(),
(AttributeUsage) usage.getSelectedItem(),
collective.isSelected(),
nonModifiable.isSelected(),
obsolete.isSelected(),
singleValued.isSelected(),
getExtraProperties());
}
}