From 85811b64468e9b7a876bd352a0299b904a53a3fb Mon Sep 17 00:00:00 2001
From: ludovicp <ludovicp@localhost>
Date: Mon, 31 May 2010 12:16:23 +0000
Subject: [PATCH] Fix for Issue #615. Add support for multiple object-class inheritance. Support added in the schema, core server and tools including Control-Panel
---
opends/src/guitools/org/opends/guitools/controlpanel/ui/NewObjectClassPanel.java | 103 +++++++++++++++++++++++++--------------------------
1 files changed, 51 insertions(+), 52 deletions(-)
diff --git a/opends/src/guitools/org/opends/guitools/controlpanel/ui/NewObjectClassPanel.java b/opends/src/guitools/org/opends/guitools/controlpanel/ui/NewObjectClassPanel.java
index de0954a..db1e02d 100644
--- a/opends/src/guitools/org/opends/guitools/controlpanel/ui/NewObjectClassPanel.java
+++ b/opends/src/guitools/org/opends/guitools/controlpanel/ui/NewObjectClassPanel.java
@@ -32,11 +32,10 @@
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.Collection;
+import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
@@ -44,8 +43,6 @@
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;
@@ -63,13 +60,17 @@
import org.opends.guitools.controlpanel.event.ConfigurationChangeEvent;
import org.opends.guitools.controlpanel.event.
ConfigurationElementCreatedListener;
+import org.opends.guitools.controlpanel.event.SuperiorObjectClassesChangedEvent;
+import org.opends.guitools.controlpanel.event.
+ SuperiorObjectClassesChangedListener;
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.components.DoubleAddRemovePanel;
+import org.opends.guitools.controlpanel.ui.components.
+ SuperiorObjectClassesEditor;
import
org.opends.guitools.controlpanel.ui.renderer.SchemaElementComboBoxCellRenderer;
-import org.opends.guitools.controlpanel.util.LowerCaseComparator;
import org.opends.guitools.controlpanel.util.Utilities;
import org.opends.messages.Message;
import org.opends.messages.MessageBuilder;
@@ -91,7 +92,7 @@
private static final long serialVersionUID = -4956885827963184571L;
private JLabel lName = Utilities.createPrimaryLabel(
INFO_CTRL_PANEL_OBJECTCLASS_NAME_LABEL.get());
- private JLabel lParent = Utilities.createPrimaryLabel(
+ private JLabel lSuperior = Utilities.createPrimaryLabel(
INFO_CTRL_PANEL_OBJECTCLASS_PARENT_LABEL.get());
private JLabel lOID = Utilities.createPrimaryLabel(
INFO_CTRL_PANEL_OBJECTCLASS_OID_LABEL.get());
@@ -114,12 +115,13 @@
private Set<AttributeType> inheritedRequiredAttributes =
new HashSet<AttributeType>();
- private JLabel[] labels = {lName, lParent, lOID, lAliases, lOrigin, lFile,
+ private JLabel[] labels = {lName, lSuperior, lOID, lAliases, lOrigin, lFile,
lDescription, lType, lAttributes
};
private JTextField name = Utilities.createMediumTextField();
- private JComboBox parent = Utilities.createComboBox();
+ private SuperiorObjectClassesEditor superiors = new
+ SuperiorObjectClassesEditor();
private JComboBox type = Utilities.createComboBox();
private JTextField oid = Utilities.createMediumTextField();
private JTextField description = Utilities.createLongTextField();
@@ -169,8 +171,7 @@
final ServerDescriptor desc = ev.getNewDescriptor();
Schema s = desc.getSchema();
- final boolean firstSchema = schema == null;
- final boolean[] repack = {firstSchema};
+ final boolean[] repack = {schema == null};
final boolean[] error = {false};
final boolean schemaChanged;
@@ -193,26 +194,8 @@
if (schemaChanged)
{
schema = s;
-
- HashMap<String, ObjectClass> objectClassNameMap = new HashMap<String,
- ObjectClass>();
- for (String key : schema.getObjectClasses().keySet())
- {
- ObjectClass oc = schema.getObjectClass(key);
- objectClassNameMap.put(oc.getNameOrOID(), oc);
- }
- SortedSet<String> orderedKeys =
- new TreeSet<String>(new LowerCaseComparator());
- orderedKeys.addAll(objectClassNameMap.keySet());
- ArrayList<Object> newParents = new ArrayList<Object>();
- for (String key : orderedKeys)
- {
- newParents.add(objectClassNameMap.get(key));
- }
- updateComboBoxModel(newParents,
- ((DefaultComboBoxModel)parent.getModel()));
}
- else
+ else if (schema == null)
{
updateErrorPane(errorPane,
ERR_CTRL_PANEL_SCHEMA_NOT_FOUND_SUMMARY.get(),
@@ -230,12 +213,9 @@
errorPane.setVisible(error[0]);
if (schema != null)
{
- if (firstSchema)
- {
- parent.setSelectedItem(schema.getObjectClass("top"));
- }
if (schemaChanged)
{
+ superiors.setSchema(schema);
updateAttributes();
}
}
@@ -335,6 +315,9 @@
}
}
+ checkCompatibleSuperiors(getObjectClassSuperiors(), getObjectClassType(),
+ errors);
+
ProgressDialog dlg = new ProgressDialog(
Utilities.createFrame(),
Utilities.getParentDialog(this),
@@ -373,6 +356,14 @@
oid.setText("");
description.setText("");
aliases.setText("");
+ superiors.setSelectedSuperiors(
+ Collections.singleton(schema.getObjectClass("top")));
+ attributes.getAvailableListModel().addAll(
+ attributes.getSelectedListModel1().getData());
+ attributes.getAvailableListModel().addAll(
+ attributes.getSelectedListModel2().getData());
+ attributes.getSelectedListModel1().clear();
+ attributes.getSelectedListModel2().clear();
name.grabFocus();
Utilities.getParentDialog(this).setVisible(false);
}
@@ -488,17 +479,14 @@
gbc.anchor = GridBagConstraints.WEST;
gbc.insets.bottom = 0;
- SchemaElementComboBoxCellRenderer renderer = new
- SchemaElementComboBoxCellRenderer(parent);
- DefaultComboBoxModel model = new DefaultComboBoxModel();
- parent.setModel(model);
- parent.setRenderer(renderer);
- ItemListener itemListener = new ItemListener()
+ SuperiorObjectClassesChangedListener listener =
+ new SuperiorObjectClassesChangedListener()
{
/**
* {@inheritDoc}
*/
- public void itemStateChanged(ItemEvent ev)
+ public void parentObjectClassesChanged(
+ SuperiorObjectClassesChangedEvent ev)
{
// Remove the previous inherited attributes.
for (AttributeType attr : inheritedRequiredAttributes)
@@ -514,18 +502,16 @@
inheritedOptionalAttributes.clear();
inheritedRequiredAttributes.clear();
- ObjectClass p = (ObjectClass)parent.getSelectedItem();
- while (p != null)
+ for (ObjectClass oc : superiors.getSelectedSuperiors())
{
- for (AttributeType attr : p.getRequiredAttributeChain())
+ for (AttributeType attr : oc.getRequiredAttributeChain())
{
inheritedRequiredAttributes.add(attr);
}
- for (AttributeType attr : p.getOptionalAttributeChain())
+ for (AttributeType attr : oc.getOptionalAttributeChain())
{
inheritedOptionalAttributes.add(attr);
}
- p = p.getSuperiorClass();
}
for (AttributeType attr : inheritedRequiredAttributes)
{
@@ -551,17 +537,30 @@
new ArrayList<AttributeType>(inheritedRequiredAttributes);
unmovableItems.addAll(inheritedOptionalAttributes);
attributes.setUnmovableItems(unmovableItems);
+
+ if (ev.getNewObjectClasses().size() > 1)
+ {
+ lSuperior.setText(
+ INFO_CTRL_PANEL_OBJECTCLASS_PARENTS_LABEL.get().toString());
+ }
+ else
+ {
+ lSuperior.setText(
+ INFO_CTRL_PANEL_OBJECTCLASS_PARENT_LABEL.get().toString());
+ }
}
};
- parent.addItemListener(itemListener);
+ superiors.addParentObjectClassesChangedListener(listener);
- model = new DefaultComboBoxModel();
+ DefaultComboBoxModel model = new DefaultComboBoxModel();
for (ObjectClassType t : ObjectClassType.values())
{
model.addElement(t);
}
type.setModel(model);
type.setSelectedItem(ObjectClassType.STRUCTURAL);
+ SchemaElementComboBoxCellRenderer renderer = new
+ SchemaElementComboBoxCellRenderer(type);
type.setRenderer(renderer);
attributes =
@@ -581,8 +580,8 @@
attributes.getSelectedListModel1().setComparator(comparator);
attributes.getSelectedListModel2().setComparator(comparator);
- Component[] basicComps = {name, oid, description, parent};
- JLabel[] basicLabels = {lName, lOID, lDescription, lParent};
+ Component[] basicComps = {name, oid, description, superiors};
+ JLabel[] basicLabels = {lName, lOID, lDescription, lSuperior};
JLabel[] basicInlineHelp = new JLabel[] {null, null, null, null};
add(basicLabels, basicComps, basicInlineHelp, this, gbc);
@@ -681,9 +680,9 @@
return o;
}
- private ObjectClass getSuperior()
+ private Set<ObjectClass> getObjectClassSuperiors()
{
- return (ObjectClass)parent.getSelectedItem();
+ return superiors.getSelectedSuperiors();
}
private Map<String, List<String>> getExtraProperties()
@@ -739,7 +738,7 @@
ObjectClass oc = new ObjectClass("", getObjectClassName(), getAllNames(),
getOID(),
getDescription(),
- getSuperior(),
+ getObjectClassSuperiors(),
getRequiredAttributes(),
getOptionalAttributes(),
getObjectClassType(),
--
Gitblit v1.10.0